
// this is autogenerated file, do not edit it.
#include "ficus/ficus.h"

struct _fx_Nt6option1N10Ast__typ_t_data_t;

static void _fx_free_Nt6option1N10Ast__typ_t(struct _fx_Nt6option1N10Ast__typ_t_data_t** dst);

struct _fx_Nt9Dynvec__t1N15C_form__cinfo_t_data_t;

static void _fx_free_Nt9Dynvec__t1N15C_form__cinfo_t(struct _fx_Nt9Dynvec__t1N15C_form__cinfo_t_data_t** dst);

struct _fx_Nt9Dynvec__t1N15K_form__kinfo_t_data_t;

static void _fx_free_Nt9Dynvec__t1N15K_form__kinfo_t(struct _fx_Nt9Dynvec__t1N15K_form__kinfo_t_data_t** dst);

struct _fx_Nt6option1N10Ast__exp_t_data_t;

static void _fx_free_Nt6option1N10Ast__exp_t(struct _fx_Nt6option1N10Ast__exp_t_data_t** dst);

struct _fx_Nt9Dynvec__t1S_data_t;

static void _fx_free_Nt9Dynvec__t1S(struct _fx_Nt9Dynvec__t1S_data_t** dst);

struct _fx_Nt9Dynvec__t1N14Ast__id_info_t_data_t;

static void _fx_free_Nt9Dynvec__t1N14Ast__id_info_t(struct _fx_Nt9Dynvec__t1N14Ast__id_info_t_data_t** dst);

struct _fx_Nt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t_data_t;

static void _fx_free_Nt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t(
   struct _fx_Nt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t_data_t** dst);

struct _fx_N10Ast__typ_t_data_t;

static void _fx_free_N10Ast__typ_t(struct _fx_N10Ast__typ_t_data_t** dst);

struct _fx_N13Ast__binary_t_data_t;

static void _fx_free_N13Ast__binary_t(struct _fx_N13Ast__binary_t_data_t** dst);

struct _fx_N10Ast__exp_t_data_t;

static void _fx_free_N10Ast__exp_t(struct _fx_N10Ast__exp_t_data_t** dst);

struct _fx_N10Ast__pat_t_data_t;

static void _fx_free_N10Ast__pat_t(struct _fx_N10Ast__pat_t_data_t** dst);

struct _fx_N16Ast__env_entry_t_data_t;

static void _fx_free_N16Ast__env_entry_t(struct _fx_N16Ast__env_entry_t_data_t** dst);

struct _fx_N16Ast__defmodule_t_data_t;

static void _fx_free_N16Ast__defmodule_t(struct _fx_N16Ast__defmodule_t_data_t** dst);

struct _fx_N14K_form__ktyp_t_data_t;

static void _fx_free_N14K_form__ktyp_t(struct _fx_N14K_form__ktyp_t_data_t** dst);

struct _fx_N14K_form__kexp_t_data_t;

static void _fx_free_N14K_form__kexp_t(struct _fx_N14K_form__kexp_t_data_t** dst);

struct _fx_Nt6option1FPv2N15C_form__cstmt_tR22C_form__c_fold_callb_t_data_t;

static void _fx_free_Nt6option1FPv2N15C_form__cstmt_tR22C_form__c_fold_callb_t(
   struct _fx_Nt6option1FPv2N15C_form__cstmt_tR22C_form__c_fold_callb_t_data_t** dst);

struct _fx_Nt6option1FPv2N14C_form__cexp_tR22C_form__c_fold_callb_t_data_t;

static void _fx_free_Nt6option1FPv2N14C_form__cexp_tR22C_form__c_fold_callb_t(
   struct _fx_Nt6option1FPv2N14C_form__cexp_tR22C_form__c_fold_callb_t_data_t** dst);

struct _fx_Nt6option1FPv2N14C_form__ctyp_tR22C_form__c_fold_callb_t_data_t;

static void _fx_free_Nt6option1FPv2N14C_form__ctyp_tR22C_form__c_fold_callb_t(
   struct _fx_Nt6option1FPv2N14C_form__ctyp_tR22C_form__c_fold_callb_t_data_t** dst);

struct _fx_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t_data_t;

static void _fx_free_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t(
   struct _fx_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t_data_t** dst);

struct _fx_Nt6option1FPN15C_form__cstmt_t2N15C_form__cstmt_tR17C_form__c_callb_t_data_t;

static void _fx_free_Nt6option1FPN15C_form__cstmt_t2N15C_form__cstmt_tR17C_form__c_callb_t(
   struct _fx_Nt6option1FPN15C_form__cstmt_t2N15C_form__cstmt_tR17C_form__c_callb_t_data_t** dst);

struct _fx_Nt6option1FPN14C_form__cexp_t2N14C_form__cexp_tR17C_form__c_callb_t_data_t;

static void _fx_free_Nt6option1FPN14C_form__cexp_t2N14C_form__cexp_tR17C_form__c_callb_t(
   struct _fx_Nt6option1FPN14C_form__cexp_t2N14C_form__cexp_tR17C_form__c_callb_t_data_t** dst);

struct _fx_Nt6option1FPN14C_form__ctyp_t2N14C_form__ctyp_tR17C_form__c_callb_t_data_t;

static void _fx_free_Nt6option1FPN14C_form__ctyp_t2N14C_form__ctyp_tR17C_form__c_callb_t(
   struct _fx_Nt6option1FPN14C_form__ctyp_t2N14C_form__ctyp_tR17C_form__c_callb_t_data_t** dst);

struct _fx_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t_data_t;

static void _fx_free_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t(
   struct _fx_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t_data_t** dst);

struct _fx_N14C_form__ctyp_t_data_t;

static void _fx_free_N14C_form__ctyp_t(struct _fx_N14C_form__ctyp_t_data_t** dst);

struct _fx_N14C_form__cexp_t_data_t;

static void _fx_free_N14C_form__cexp_t(struct _fx_N14C_form__cexp_t_data_t** dst);

struct _fx_N15C_form__cstmt_t_data_t;

static void _fx_free_N15C_form__cstmt_t(struct _fx_N15C_form__cstmt_t_data_t** dst);

typedef struct _fx_Nt6option1N10Ast__typ_t_data_t {
   int_ rc;
   union {
      struct _fx_N10Ast__typ_t_data_t* Some;
   } u;
} _fx_Nt6option1N10Ast__typ_t_data_t, *_fx_Nt6option1N10Ast__typ_t;

typedef struct _fx_LS_data_t {
   int_ rc;
   struct _fx_LS_data_t* tl;
   fx_str_t hd;
} _fx_LS_data_t, *_fx_LS;

typedef struct _fx_Ta2i {
   int_ t0;
   int_ t1;
} _fx_Ta2i;

typedef struct _fx_T2Ta2iS {
   struct _fx_Ta2i t0;
   fx_str_t t1;
} _fx_T2Ta2iS;

typedef struct _fx_R9Ast__id_t {
   int_ m;
   int_ i;
   int_ j;
} _fx_R9Ast__id_t;

typedef struct _fx_R10Ast__loc_t {
   int_ m_idx;
   int_ line0;
   int_ col0;
   int_ line1;
   int_ col1;
} _fx_R10Ast__loc_t;

typedef struct _fx_T2R9Ast__id_ti {
   struct _fx_R9Ast__id_t t0;
   int_ t1;
} _fx_T2R9Ast__id_ti;

typedef struct _fx_T2Bi {
   bool t0;
   int_ t1;
} _fx_T2Bi;

typedef struct _fx_N12Ast__scope_t {
   int tag;
   union {
      int_ ScBlock;
      struct _fx_T2Bi ScLoop;
      int_ ScFold;
      int_ ScArrMap;
      int_ ScMap;
      int_ ScTry;
      struct _fx_R9Ast__id_t ScFun;
      struct _fx_R9Ast__id_t ScClass;
      struct _fx_R9Ast__id_t ScInterface;
      int_ ScModule;
   } u;
} _fx_N12Ast__scope_t;

typedef struct _fx_LN12Ast__scope_t_data_t {
   int_ rc;
   struct _fx_LN12Ast__scope_t_data_t* tl;
   struct _fx_N12Ast__scope_t hd;
} _fx_LN12Ast__scope_t_data_t, *_fx_LN12Ast__scope_t;

typedef struct _fx_R16Ast__val_flags_t {
   bool val_flag_arg;
   bool val_flag_mutable;
   bool val_flag_temp;
   bool val_flag_tempref;
   bool val_flag_private;
   bool val_flag_subarray;
   bool val_flag_instance;
   struct _fx_T2R9Ast__id_ti val_flag_method;
   int_ val_flag_ctor;
   struct _fx_LN12Ast__scope_t_data_t* val_flag_global;
} _fx_R16Ast__val_flags_t;

typedef struct _fx_R17C_form__cdefval_t {
   struct _fx_R9Ast__id_t cv_name;
   struct _fx_N14C_form__ctyp_t_data_t* cv_typ;
   fx_str_t cv_cname;
   struct _fx_R16Ast__val_flags_t cv_flags;
   struct _fx_R10Ast__loc_t cv_loc;
} _fx_R17C_form__cdefval_t;

typedef struct _fx_R19C_form__cdeflabel_t {
   struct _fx_R9Ast__id_t cl_name;
   fx_str_t cl_cname;
   struct _fx_R10Ast__loc_t cl_loc;
} _fx_R19C_form__cdeflabel_t;

typedef struct _fx_T2R9Ast__id_tN14C_form__ctyp_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_N14C_form__ctyp_t_data_t* t1;
} _fx_T2R9Ast__id_tN14C_form__ctyp_t;

typedef struct _fx_LT2R9Ast__id_tN14C_form__ctyp_t_data_t {
   int_ rc;
   struct _fx_LT2R9Ast__id_tN14C_form__ctyp_t_data_t* tl;
   struct _fx_T2R9Ast__id_tN14C_form__ctyp_t hd;
} _fx_LT2R9Ast__id_tN14C_form__ctyp_t_data_t, *_fx_LT2R9Ast__id_tN14C_form__ctyp_t;

typedef struct _fx_R23C_form__cdefinterface_t {
   struct _fx_R9Ast__id_t ci_name;
   fx_str_t ci_cname;
   struct _fx_R9Ast__id_t ci_id;
   struct _fx_R9Ast__id_t ci_vtbl;
   struct _fx_R9Ast__id_t ci_base;
   struct _fx_LT2R9Ast__id_tN14C_form__ctyp_t_data_t* ci_all_methods;
   struct _fx_LN12Ast__scope_t_data_t* ci_scope;
   struct _fx_R10Ast__loc_t ci_loc;
} _fx_R23C_form__cdefinterface_t;

typedef struct _fx_rR23C_form__cdefinterface_t_data_t {
   int_ rc;
   struct _fx_R23C_form__cdefinterface_t data;
} _fx_rR23C_form__cdefinterface_t_data_t, *_fx_rR23C_form__cdefinterface_t;

typedef struct _fx_N17Ast__fun_constr_t {
   int tag;
   union {
      int_ CtorVariant;
      struct _fx_R9Ast__id_t CtorFP;
      struct _fx_R9Ast__id_t CtorExn;
   } u;
} _fx_N17Ast__fun_constr_t;

typedef struct _fx_R16Ast__fun_flags_t {
   int_ fun_flag_pure;
   bool fun_flag_ccode;
   bool fun_flag_have_keywords;
   bool fun_flag_inline;
   bool fun_flag_nothrow;
   bool fun_flag_really_nothrow;
   bool fun_flag_private;
   struct _fx_N17Ast__fun_constr_t fun_flag_ctor;
   struct _fx_R9Ast__id_t fun_flag_method_of;
   bool fun_flag_uses_fv;
   bool fun_flag_recursive;
   bool fun_flag_instance;
} _fx_R16Ast__fun_flags_t;

typedef struct _fx_LN15C_form__cstmt_t_data_t {
   int_ rc;
   struct _fx_LN15C_form__cstmt_t_data_t* tl;
   struct _fx_N15C_form__cstmt_t_data_t* hd;
} _fx_LN15C_form__cstmt_t_data_t, *_fx_LN15C_form__cstmt_t;

typedef struct _fx_N19C_form__carg_attr_t {
   int tag;
} _fx_N19C_form__carg_attr_t;

typedef struct _fx_LN19C_form__carg_attr_t_data_t {
   int_ rc;
   struct _fx_LN19C_form__carg_attr_t_data_t* tl;
   struct _fx_N19C_form__carg_attr_t hd;
} _fx_LN19C_form__carg_attr_t_data_t, *_fx_LN19C_form__carg_attr_t;

typedef struct _fx_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_N14C_form__ctyp_t_data_t* t1;
   struct _fx_LN19C_form__carg_attr_t_data_t* t2;
} _fx_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t;

typedef struct _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t_data_t {
   int_ rc;
   struct _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t_data_t* tl;
   struct _fx_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t hd;
} _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t_data_t, *_fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t;

typedef struct _fx_R17C_form__cdeffun_t {
   struct _fx_R9Ast__id_t cf_name;
   fx_str_t cf_cname;
   struct _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t_data_t* cf_args;
   struct _fx_N14C_form__ctyp_t_data_t* cf_rt;
   struct _fx_LN15C_form__cstmt_t_data_t* cf_body;
   struct _fx_R16Ast__fun_flags_t cf_flags;
   struct _fx_LN12Ast__scope_t_data_t* cf_scope;
   struct _fx_R10Ast__loc_t cf_loc;
} _fx_R17C_form__cdeffun_t;

typedef struct _fx_rR17C_form__cdeffun_t_data_t {
   int_ rc;
   struct _fx_R17C_form__cdeffun_t data;
} _fx_rR17C_form__cdeffun_t_data_t, *_fx_rR17C_form__cdeffun_t;

typedef struct _fx_Ta2R9Ast__id_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_R9Ast__id_t t1;
} _fx_Ta2R9Ast__id_t;

typedef struct _fx_LR9Ast__id_t_data_t {
   int_ rc;
   struct _fx_LR9Ast__id_t_data_t* tl;
   struct _fx_R9Ast__id_t hd;
} _fx_LR9Ast__id_t_data_t, *_fx_LR9Ast__id_t;

typedef struct _fx_R17C_form__ctprops_t {
   bool ctp_scalar;
   bool ctp_complex;
   bool ctp_ptr;
   bool ctp_pass_by_ref;
   struct _fx_LR9Ast__id_t_data_t* ctp_make;
   struct _fx_Ta2R9Ast__id_t ctp_free;
   struct _fx_Ta2R9Ast__id_t ctp_copy;
} _fx_R17C_form__ctprops_t;

typedef struct _fx_R17C_form__cdeftyp_t {
   struct _fx_R9Ast__id_t ct_name;
   struct _fx_N14C_form__ctyp_t_data_t* ct_typ;
   fx_str_t ct_cname;
   struct _fx_R17C_form__ctprops_t ct_props;
   int_ ct_data_start;
   struct _fx_R9Ast__id_t ct_enum;
   struct _fx_LR9Ast__id_t_data_t* ct_ifaces;
   struct _fx_R9Ast__id_t ct_ifaces_id;
   struct _fx_LN12Ast__scope_t_data_t* ct_scope;
   struct _fx_R10Ast__loc_t ct_loc;
} _fx_R17C_form__cdeftyp_t;

typedef struct _fx_rR17C_form__cdeftyp_t_data_t {
   int_ rc;
   struct _fx_R17C_form__cdeftyp_t data;
} _fx_rR17C_form__cdeftyp_t_data_t, *_fx_rR17C_form__cdeftyp_t;

typedef struct _fx_Nt6option1N14C_form__cexp_t {
   int tag;
   union {
      struct _fx_N14C_form__cexp_t_data_t* Some;
   } u;
} _fx_Nt6option1N14C_form__cexp_t;

typedef struct _fx_T2R9Ast__id_tNt6option1N14C_form__cexp_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_Nt6option1N14C_form__cexp_t t1;
} _fx_T2R9Ast__id_tNt6option1N14C_form__cexp_t;

typedef struct _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t_data_t {
   int_ rc;
   struct _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t_data_t* tl;
   struct _fx_T2R9Ast__id_tNt6option1N14C_form__cexp_t hd;
} _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t_data_t, *_fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t;

typedef struct _fx_R18C_form__cdefenum_t {
   struct _fx_R9Ast__id_t cenum_name;
   struct _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t_data_t* cenum_members;
   fx_str_t cenum_cname;
   struct _fx_LN12Ast__scope_t_data_t* cenum_scope;
   struct _fx_R10Ast__loc_t cenum_loc;
} _fx_R18C_form__cdefenum_t;

typedef struct _fx_rR18C_form__cdefenum_t_data_t {
   int_ rc;
   struct _fx_R18C_form__cdefenum_t data;
} _fx_rR18C_form__cdefenum_t_data_t, *_fx_rR18C_form__cdefenum_t;

typedef struct _fx_R19C_form__cdefmacro_t {
   struct _fx_R9Ast__id_t cm_name;
   fx_str_t cm_cname;
   struct _fx_LR9Ast__id_t_data_t* cm_args;
   struct _fx_LN15C_form__cstmt_t_data_t* cm_body;
   struct _fx_LN12Ast__scope_t_data_t* cm_scope;
   struct _fx_R10Ast__loc_t cm_loc;
} _fx_R19C_form__cdefmacro_t;

typedef struct _fx_rR19C_form__cdefmacro_t_data_t {
   int_ rc;
   struct _fx_R19C_form__cdefmacro_t data;
} _fx_rR19C_form__cdefmacro_t_data_t, *_fx_rR19C_form__cdefmacro_t;

typedef struct _fx_R17C_form__cdefexn_t {
   struct _fx_R9Ast__id_t cexn_name;
   fx_str_t cexn_cname;
   fx_str_t cexn_base_cname;
   struct _fx_N14C_form__ctyp_t_data_t* cexn_typ;
   bool cexn_std;
   struct _fx_R9Ast__id_t cexn_tag;
   struct _fx_R9Ast__id_t cexn_data;
   struct _fx_R9Ast__id_t cexn_info;
   struct _fx_R9Ast__id_t cexn_make;
   struct _fx_LN12Ast__scope_t_data_t* cexn_scope;
   struct _fx_R10Ast__loc_t cexn_loc;
} _fx_R17C_form__cdefexn_t;

typedef struct _fx_rR17C_form__cdefexn_t_data_t {
   int_ rc;
   struct _fx_R17C_form__cdefexn_t data;
} _fx_rR17C_form__cdefexn_t_data_t, *_fx_rR17C_form__cdefexn_t;

typedef struct _fx_N15C_form__cinfo_t {
   int tag;
   union {
      struct _fx_R17C_form__cdefval_t CVal;
      struct _fx_rR17C_form__cdeffun_t_data_t* CFun;
      struct _fx_rR17C_form__cdeftyp_t_data_t* CTyp;
      struct _fx_rR17C_form__cdefexn_t_data_t* CExn;
      struct _fx_rR23C_form__cdefinterface_t_data_t* CInterface;
      struct _fx_rR18C_form__cdefenum_t_data_t* CEnum;
      struct _fx_R19C_form__cdeflabel_t CLabel;
      struct _fx_rR19C_form__cdefmacro_t_data_t* CMacro;
   } u;
} _fx_N15C_form__cinfo_t;

typedef struct _fx_T3iA1N15C_form__cinfo_tN15C_form__cinfo_t {
   int_ t0;
   fx_arr_t t1;
   struct _fx_N15C_form__cinfo_t t2;
} _fx_T3iA1N15C_form__cinfo_tN15C_form__cinfo_t;

typedef struct _fx_Nt9Dynvec__t1N15C_form__cinfo_t_data_t {
   int_ rc;
   union {
      struct _fx_T3iA1N15C_form__cinfo_tN15C_form__cinfo_t t;
   } u;
} _fx_Nt9Dynvec__t1N15C_form__cinfo_t_data_t, *_fx_Nt9Dynvec__t1N15C_form__cinfo_t;

typedef struct _fx_R17K_form__kdefval_t {
   struct _fx_R9Ast__id_t kv_name;
   fx_str_t kv_cname;
   struct _fx_N14K_form__ktyp_t_data_t* kv_typ;
   struct _fx_R16Ast__val_flags_t kv_flags;
   struct _fx_R10Ast__loc_t kv_loc;
} _fx_R17K_form__kdefval_t;

typedef struct _fx_T2R9Ast__id_tN14K_form__ktyp_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_N14K_form__ktyp_t_data_t* t1;
} _fx_T2R9Ast__id_tN14K_form__ktyp_t;

typedef struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t {
   int_ rc;
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* tl;
   struct _fx_T2R9Ast__id_tN14K_form__ktyp_t hd;
} _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t, *_fx_LT2R9Ast__id_tN14K_form__ktyp_t;

typedef struct _fx_R23K_form__kdefinterface_t {
   struct _fx_R9Ast__id_t ki_name;
   struct _fx_R9Ast__id_t ki_base;
   fx_str_t ki_cname;
   struct _fx_R9Ast__id_t ki_id;
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* ki_all_methods;
   struct _fx_LN12Ast__scope_t_data_t* ki_scope;
   struct _fx_R10Ast__loc_t ki_loc;
} _fx_R23K_form__kdefinterface_t;

typedef struct _fx_rR23K_form__kdefinterface_t_data_t {
   int_ rc;
   struct _fx_R23K_form__kdefinterface_t data;
} _fx_rR23K_form__kdefinterface_t_data_t, *_fx_rR23K_form__kdefinterface_t;

typedef struct _fx_R25K_form__kdefclosureinfo_t {
   struct _fx_R9Ast__id_t kci_arg;
   struct _fx_R9Ast__id_t kci_fcv_t;
   struct _fx_R9Ast__id_t kci_fp_typ;
   struct _fx_R9Ast__id_t kci_make_fp;
   struct _fx_R9Ast__id_t kci_wrap_f;
} _fx_R25K_form__kdefclosureinfo_t;

typedef struct _fx_R17K_form__kdeffun_t {
   struct _fx_R9Ast__id_t kf_name;
   fx_str_t kf_cname;
   struct _fx_LR9Ast__id_t_data_t* kf_params;
   struct _fx_N14K_form__ktyp_t_data_t* kf_rt;
   struct _fx_N14K_form__kexp_t_data_t* kf_body;
   struct _fx_R16Ast__fun_flags_t kf_flags;
   struct _fx_R25K_form__kdefclosureinfo_t kf_closure;
   struct _fx_LN12Ast__scope_t_data_t* kf_scope;
   struct _fx_R10Ast__loc_t kf_loc;
} _fx_R17K_form__kdeffun_t;

typedef struct _fx_rR17K_form__kdeffun_t_data_t {
   int_ rc;
   struct _fx_R17K_form__kdeffun_t data;
} _fx_rR17K_form__kdeffun_t_data_t, *_fx_rR17K_form__kdeffun_t;

typedef struct _fx_R17K_form__kdefexn_t {
   struct _fx_R9Ast__id_t ke_name;
   fx_str_t ke_cname;
   fx_str_t ke_base_cname;
   struct _fx_N14K_form__ktyp_t_data_t* ke_typ;
   bool ke_std;
   struct _fx_R9Ast__id_t ke_tag;
   struct _fx_R9Ast__id_t ke_make;
   struct _fx_LN12Ast__scope_t_data_t* ke_scope;
   struct _fx_R10Ast__loc_t ke_loc;
} _fx_R17K_form__kdefexn_t;

typedef struct _fx_rR17K_form__kdefexn_t_data_t {
   int_ rc;
   struct _fx_R17K_form__kdefexn_t data;
} _fx_rR17K_form__kdefexn_t_data_t, *_fx_rR17K_form__kdefexn_t;

typedef struct _fx_R17K_form__ktprops_t {
   bool ktp_complex;
   bool ktp_scalar;
   bool ktp_ptr;
   bool ktp_pass_by_ref;
   bool ktp_custom_free;
   bool ktp_custom_copy;
} _fx_R17K_form__ktprops_t;

typedef struct _fx_Nt6option1R17K_form__ktprops_t {
   int tag;
   union {
      struct _fx_R17K_form__ktprops_t Some;
   } u;
} _fx_Nt6option1R17K_form__ktprops_t;

typedef struct _fx_R16Ast__var_flags_t {
   int_ var_flag_class_from;
   bool var_flag_record;
   bool var_flag_recursive;
   bool var_flag_have_tag;
   bool var_flag_have_mutable;
   bool var_flag_opt;
   bool var_flag_instance;
} _fx_R16Ast__var_flags_t;

typedef struct _fx_LN14K_form__ktyp_t_data_t {
   int_ rc;
   struct _fx_LN14K_form__ktyp_t_data_t* tl;
   struct _fx_N14K_form__ktyp_t_data_t* hd;
} _fx_LN14K_form__ktyp_t_data_t, *_fx_LN14K_form__ktyp_t;

typedef struct _fx_T2R9Ast__id_tLR9Ast__id_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_LR9Ast__id_t_data_t* t1;
} _fx_T2R9Ast__id_tLR9Ast__id_t;

typedef struct _fx_LT2R9Ast__id_tLR9Ast__id_t_data_t {
   int_ rc;
   struct _fx_LT2R9Ast__id_tLR9Ast__id_t_data_t* tl;
   struct _fx_T2R9Ast__id_tLR9Ast__id_t hd;
} _fx_LT2R9Ast__id_tLR9Ast__id_t_data_t, *_fx_LT2R9Ast__id_tLR9Ast__id_t;

typedef struct _fx_R21K_form__kdefvariant_t {
   struct _fx_R9Ast__id_t kvar_name;
   fx_str_t kvar_cname;
   struct _fx_R9Ast__id_t kvar_proto;
   struct _fx_Nt6option1R17K_form__ktprops_t kvar_props;
   struct _fx_LN14K_form__ktyp_t_data_t* kvar_targs;
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* kvar_cases;
   struct _fx_LR9Ast__id_t_data_t* kvar_ctors;
   struct _fx_R16Ast__var_flags_t kvar_flags;
   struct _fx_LT2R9Ast__id_tLR9Ast__id_t_data_t* kvar_ifaces;
   struct _fx_LN12Ast__scope_t_data_t* kvar_scope;
   struct _fx_R10Ast__loc_t kvar_loc;
} _fx_R21K_form__kdefvariant_t;

typedef struct _fx_rR21K_form__kdefvariant_t_data_t {
   int_ rc;
   struct _fx_R21K_form__kdefvariant_t data;
} _fx_rR21K_form__kdefvariant_t_data_t, *_fx_rR21K_form__kdefvariant_t;

typedef struct _fx_R17K_form__kdeftyp_t {
   struct _fx_R9Ast__id_t kt_name;
   fx_str_t kt_cname;
   struct _fx_R9Ast__id_t kt_proto;
   struct _fx_Nt6option1R17K_form__ktprops_t kt_props;
   struct _fx_LN14K_form__ktyp_t_data_t* kt_targs;
   struct _fx_N14K_form__ktyp_t_data_t* kt_typ;
   struct _fx_LN12Ast__scope_t_data_t* kt_scope;
   struct _fx_R10Ast__loc_t kt_loc;
} _fx_R17K_form__kdeftyp_t;

typedef struct _fx_rR17K_form__kdeftyp_t_data_t {
   int_ rc;
   struct _fx_R17K_form__kdeftyp_t data;
} _fx_rR17K_form__kdeftyp_t_data_t, *_fx_rR17K_form__kdeftyp_t;

typedef struct _fx_R25K_form__kdefclosurevars_t {
   struct _fx_R9Ast__id_t kcv_name;
   fx_str_t kcv_cname;
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* kcv_freevars;
   struct _fx_LR9Ast__id_t_data_t* kcv_orig_freevars;
   struct _fx_LN12Ast__scope_t_data_t* kcv_scope;
   struct _fx_R10Ast__loc_t kcv_loc;
} _fx_R25K_form__kdefclosurevars_t;

typedef struct _fx_rR25K_form__kdefclosurevars_t_data_t {
   int_ rc;
   struct _fx_R25K_form__kdefclosurevars_t data;
} _fx_rR25K_form__kdefclosurevars_t_data_t, *_fx_rR25K_form__kdefclosurevars_t;

typedef struct _fx_N15K_form__kinfo_t {
   int tag;
   union {
      struct _fx_R17K_form__kdefval_t KVal;
      struct _fx_rR17K_form__kdeffun_t_data_t* KFun;
      struct _fx_rR17K_form__kdefexn_t_data_t* KExn;
      struct _fx_rR21K_form__kdefvariant_t_data_t* KVariant;
      struct _fx_rR25K_form__kdefclosurevars_t_data_t* KClosureVars;
      struct _fx_rR23K_form__kdefinterface_t_data_t* KInterface;
      struct _fx_rR17K_form__kdeftyp_t_data_t* KTyp;
   } u;
} _fx_N15K_form__kinfo_t;

typedef struct _fx_T3iA1N15K_form__kinfo_tN15K_form__kinfo_t {
   int_ t0;
   fx_arr_t t1;
   struct _fx_N15K_form__kinfo_t t2;
} _fx_T3iA1N15K_form__kinfo_tN15K_form__kinfo_t;

typedef struct _fx_Nt9Dynvec__t1N15K_form__kinfo_t_data_t {
   int_ rc;
   union {
      struct _fx_T3iA1N15K_form__kinfo_tN15K_form__kinfo_t t;
   } u;
} _fx_Nt9Dynvec__t1N15K_form__kinfo_t_data_t, *_fx_Nt9Dynvec__t1N15K_form__kinfo_t;

typedef struct _fx_Nt6option1R9Ast__id_t {
   int tag;
   union {
      struct _fx_R9Ast__id_t Some;
   } u;
} _fx_Nt6option1R9Ast__id_t;

typedef struct _fx_Nt6option1N10Ast__exp_t_data_t {
   int_ rc;
   union {
      struct _fx_N10Ast__exp_t_data_t* Some;
   } u;
} _fx_Nt6option1N10Ast__exp_t_data_t, *_fx_Nt6option1N10Ast__exp_t;

typedef struct _fx_T3iA1SS {
   int_ t0;
   fx_arr_t t1;
   fx_str_t t2;
} _fx_T3iA1SS;

typedef struct _fx_Nt9Dynvec__t1S_data_t {
   int_ rc;
   union {
      struct _fx_T3iA1SS t;
   } u;
} _fx_Nt9Dynvec__t1S_data_t, *_fx_Nt9Dynvec__t1S;

typedef struct _fx_R13Ast__defval_t {
   struct _fx_R9Ast__id_t dv_name;
   struct _fx_N10Ast__typ_t_data_t* dv_typ;
   struct _fx_R16Ast__val_flags_t dv_flags;
   struct _fx_LN12Ast__scope_t_data_t* dv_scope;
   struct _fx_R10Ast__loc_t dv_loc;
} _fx_R13Ast__defval_t;

typedef struct _fx_FPi2R9Ast__id_tR9Ast__id_t {
   int (*fp)(struct _fx_R9Ast__id_t*, struct _fx_R9Ast__id_t*, int_*, void*);
   fx_fcv_t* fcv;
} _fx_FPi2R9Ast__id_tR9Ast__id_t;

typedef struct _fx_Rt6Map__t2R9Ast__id_tLN16Ast__env_entry_t {
   struct _fx_Nt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t_data_t* root;
   struct _fx_FPi2R9Ast__id_tR9Ast__id_t cmp;
} _fx_Rt6Map__t2R9Ast__id_tLN16Ast__env_entry_t;

typedef struct _fx_LN10Ast__pat_t_data_t {
   int_ rc;
   struct _fx_LN10Ast__pat_t_data_t* tl;
   struct _fx_N10Ast__pat_t_data_t* hd;
} _fx_LN10Ast__pat_t_data_t, *_fx_LN10Ast__pat_t;

typedef struct _fx_rLR9Ast__id_t_data_t {
   int_ rc;
   struct _fx_LR9Ast__id_t_data_t* data;
} _fx_rLR9Ast__id_t_data_t, *_fx_rLR9Ast__id_t;

typedef struct _fx_R13Ast__deffun_t {
   struct _fx_R9Ast__id_t df_name;
   struct _fx_LR9Ast__id_t_data_t* df_templ_args;
   struct _fx_LN10Ast__pat_t_data_t* df_args;
   struct _fx_N10Ast__typ_t_data_t* df_typ;
   struct _fx_N10Ast__exp_t_data_t* df_body;
   struct _fx_R16Ast__fun_flags_t df_flags;
   struct _fx_LN12Ast__scope_t_data_t* df_scope;
   struct _fx_R10Ast__loc_t df_loc;
   struct _fx_rLR9Ast__id_t_data_t* df_templ_inst;
   struct _fx_Rt6Map__t2R9Ast__id_tLN16Ast__env_entry_t df_env;
} _fx_R13Ast__deffun_t;

typedef struct _fx_rR13Ast__deffun_t_data_t {
   int_ rc;
   struct _fx_R13Ast__deffun_t data;
} _fx_rR13Ast__deffun_t_data_t, *_fx_rR13Ast__deffun_t;

typedef struct _fx_R13Ast__defexn_t {
   struct _fx_R9Ast__id_t dexn_name;
   struct _fx_N10Ast__typ_t_data_t* dexn_typ;
   struct _fx_LN12Ast__scope_t_data_t* dexn_scope;
   struct _fx_R10Ast__loc_t dexn_loc;
} _fx_R13Ast__defexn_t;

typedef struct _fx_rR13Ast__defexn_t_data_t {
   int_ rc;
   struct _fx_R13Ast__defexn_t data;
} _fx_rR13Ast__defexn_t_data_t, *_fx_rR13Ast__defexn_t;

typedef struct _fx_R13Ast__deftyp_t {
   struct _fx_R9Ast__id_t dt_name;
   struct _fx_LR9Ast__id_t_data_t* dt_templ_args;
   struct _fx_N10Ast__typ_t_data_t* dt_typ;
   bool dt_finalized;
   struct _fx_LN12Ast__scope_t_data_t* dt_scope;
   struct _fx_R10Ast__loc_t dt_loc;
} _fx_R13Ast__deftyp_t;

typedef struct _fx_rR13Ast__deftyp_t_data_t {
   int_ rc;
   struct _fx_R13Ast__deftyp_t data;
} _fx_rR13Ast__deftyp_t_data_t, *_fx_rR13Ast__deftyp_t;

typedef struct _fx_T2R9Ast__id_tN10Ast__typ_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_N10Ast__typ_t_data_t* t1;
} _fx_T2R9Ast__id_tN10Ast__typ_t;

typedef struct _fx_LT2R9Ast__id_tN10Ast__typ_t_data_t {
   int_ rc;
   struct _fx_LT2R9Ast__id_tN10Ast__typ_t_data_t* tl;
   struct _fx_T2R9Ast__id_tN10Ast__typ_t hd;
} _fx_LT2R9Ast__id_tN10Ast__typ_t_data_t, *_fx_LT2R9Ast__id_tN10Ast__typ_t;

typedef struct _fx_LTa2R9Ast__id_t_data_t {
   int_ rc;
   struct _fx_LTa2R9Ast__id_t_data_t* tl;
   struct _fx_Ta2R9Ast__id_t hd;
} _fx_LTa2R9Ast__id_t_data_t, *_fx_LTa2R9Ast__id_t;

typedef struct _fx_T2R9Ast__id_tLTa2R9Ast__id_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_LTa2R9Ast__id_t_data_t* t1;
} _fx_T2R9Ast__id_tLTa2R9Ast__id_t;

typedef struct _fx_LT2R9Ast__id_tLTa2R9Ast__id_t_data_t {
   int_ rc;
   struct _fx_LT2R9Ast__id_tLTa2R9Ast__id_t_data_t* tl;
   struct _fx_T2R9Ast__id_tLTa2R9Ast__id_t hd;
} _fx_LT2R9Ast__id_tLTa2R9Ast__id_t_data_t, *_fx_LT2R9Ast__id_tLTa2R9Ast__id_t;

typedef struct _fx_R17Ast__defvariant_t {
   struct _fx_R9Ast__id_t dvar_name;
   struct _fx_LR9Ast__id_t_data_t* dvar_templ_args;
   struct _fx_N10Ast__typ_t_data_t* dvar_alias;
   struct _fx_R16Ast__var_flags_t dvar_flags;
   struct _fx_LT2R9Ast__id_tN10Ast__typ_t_data_t* dvar_cases;
   struct _fx_LR9Ast__id_t_data_t* dvar_ctors;
   struct _fx_rLR9Ast__id_t_data_t* dvar_templ_inst;
   struct _fx_LT2R9Ast__id_tLTa2R9Ast__id_t_data_t* dvar_ifaces;
   struct _fx_LN12Ast__scope_t_data_t* dvar_scope;
   struct _fx_R10Ast__loc_t dvar_loc;
} _fx_R17Ast__defvariant_t;

typedef struct _fx_rR17Ast__defvariant_t_data_t {
   int_ rc;
   struct _fx_R17Ast__defvariant_t data;
} _fx_rR17Ast__defvariant_t_data_t, *_fx_rR17Ast__defvariant_t;

typedef struct _fx_T3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_N10Ast__typ_t_data_t* t1;
   struct _fx_R16Ast__fun_flags_t t2;
} _fx_T3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t;

typedef struct _fx_LT3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t_data_t {
   int_ rc;
   struct _fx_LT3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t_data_t* tl;
   struct _fx_T3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t hd;
} _fx_LT3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t_data_t, *_fx_LT3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t;

typedef struct _fx_R19Ast__definterface_t {
   struct _fx_R9Ast__id_t di_name;
   struct _fx_R9Ast__id_t di_base;
   struct _fx_LT3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t_data_t* di_new_methods;
   struct _fx_LT3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t_data_t* di_all_methods;
   struct _fx_LN12Ast__scope_t_data_t* di_scope;
   struct _fx_R10Ast__loc_t di_loc;
} _fx_R19Ast__definterface_t;

typedef struct _fx_rR19Ast__definterface_t_data_t {
   int_ rc;
   struct _fx_R19Ast__definterface_t data;
} _fx_rR19Ast__definterface_t_data_t, *_fx_rR19Ast__definterface_t;

typedef struct _fx_N14Ast__id_info_t {
   int tag;
   union {
      struct _fx_R13Ast__defval_t IdDVal;
      struct _fx_rR13Ast__deffun_t_data_t* IdFun;
      struct _fx_rR13Ast__defexn_t_data_t* IdExn;
      struct _fx_rR13Ast__deftyp_t_data_t* IdTyp;
      struct _fx_rR17Ast__defvariant_t_data_t* IdVariant;
      struct _fx_rR19Ast__definterface_t_data_t* IdInterface;
      int_ IdModule;
   } u;
} _fx_N14Ast__id_info_t;

typedef struct _fx_T3iA1N14Ast__id_info_tN14Ast__id_info_t {
   int_ t0;
   fx_arr_t t1;
   struct _fx_N14Ast__id_info_t t2;
} _fx_T3iA1N14Ast__id_info_tN14Ast__id_info_t;

typedef struct _fx_Nt9Dynvec__t1N14Ast__id_info_t_data_t {
   int_ rc;
   union {
      struct _fx_T3iA1N14Ast__id_info_tN14Ast__id_info_t t;
   } u;
} _fx_Nt9Dynvec__t1N14Ast__id_info_t_data_t, *_fx_Nt9Dynvec__t1N14Ast__id_info_t;

typedef struct _fx_N12Map__color_t {
   int tag;
} _fx_N12Map__color_t;

typedef struct _fx_LN16Ast__env_entry_t_data_t {
   int_ rc;
   struct _fx_LN16Ast__env_entry_t_data_t* tl;
   struct _fx_N16Ast__env_entry_t_data_t* hd;
} _fx_LN16Ast__env_entry_t_data_t, *_fx_LN16Ast__env_entry_t;

typedef struct _fx_T5N12Map__color_tNt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_tR9Ast__id_tLN16Ast__env_entry_tNt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t {
   struct _fx_N12Map__color_t t0;
   struct _fx_Nt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t_data_t* t1;
   struct _fx_R9Ast__id_t t2;
   struct _fx_LN16Ast__env_entry_t_data_t* t3;
   struct _fx_Nt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t_data_t* t4;
} _fx_T5N12Map__color_tNt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_tR9Ast__id_tLN16Ast__env_entry_tNt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t;

typedef struct _fx_Nt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t_data_t {
   int_ rc;
   union {
      struct _fx_T5N12Map__color_tNt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_tR9Ast__id_tLN16Ast__env_entry_tNt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t
         Node;
   } u;
} _fx_Nt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t_data_t, *_fx_Nt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t;

typedef struct _fx_T2R10Ast__loc_tS {
   struct _fx_R10Ast__loc_t t0;
   fx_str_t t1;
} _fx_T2R10Ast__loc_tS;

typedef struct _fx_T2il {
   int_ t0;
   int64_t t1;
} _fx_T2il;

typedef struct _fx_T2iq {
   int_ t0;
   uint64_t t1;
} _fx_T2iq;

typedef struct _fx_T2id {
   int_ t0;
   double t1;
} _fx_T2id;

typedef struct _fx_N10Ast__lit_t {
   int tag;
   union {
      int64_t LitInt;
      struct _fx_T2il LitSInt;
      struct _fx_T2iq LitUInt;
      struct _fx_T2id LitFloat;
      fx_str_t LitString;
      char_ LitChar;
      bool LitBool;
   } u;
} _fx_N10Ast__lit_t;

typedef struct _fx_rNt6option1N10Ast__typ_t_data_t {
   int_ rc;
   struct _fx_Nt6option1N10Ast__typ_t_data_t* data;
} _fx_rNt6option1N10Ast__typ_t_data_t, *_fx_rNt6option1N10Ast__typ_t;

typedef struct _fx_LN10Ast__typ_t_data_t {
   int_ rc;
   struct _fx_LN10Ast__typ_t_data_t* tl;
   struct _fx_N10Ast__typ_t_data_t* hd;
} _fx_LN10Ast__typ_t_data_t, *_fx_LN10Ast__typ_t;

typedef struct _fx_T2LN10Ast__typ_tN10Ast__typ_t {
   struct _fx_LN10Ast__typ_t_data_t* t0;
   struct _fx_N10Ast__typ_t_data_t* t1;
} _fx_T2LN10Ast__typ_tN10Ast__typ_t;

typedef struct _fx_T2iN10Ast__typ_t {
   int_ t0;
   struct _fx_N10Ast__typ_t_data_t* t1;
} _fx_T2iN10Ast__typ_t;

typedef struct _fx_T4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t {
   struct _fx_R16Ast__val_flags_t t0;
   struct _fx_R9Ast__id_t t1;
   struct _fx_N10Ast__typ_t_data_t* t2;
   struct _fx_N10Ast__exp_t_data_t* t3;
} _fx_T4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t;

typedef struct _fx_LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t_data_t {
   int_ rc;
   struct _fx_LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t_data_t* tl;
   struct _fx_T4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t hd;
} _fx_LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t_data_t, *_fx_LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t;

typedef struct _fx_T2LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_tB {
   struct _fx_LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t_data_t* t0;
   bool t1;
} _fx_T2LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_tB;

typedef struct _fx_rT2LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_tB_data_t {
   int_ rc;
   struct _fx_T2LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_tB data;
} _fx_rT2LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_tB_data_t, *_fx_rT2LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_tB;

typedef struct _fx_T2LN10Ast__typ_tR9Ast__id_t {
   struct _fx_LN10Ast__typ_t_data_t* t0;
   struct _fx_R9Ast__id_t t1;
} _fx_T2LN10Ast__typ_tR9Ast__id_t;

typedef struct _fx_N10Ast__typ_t_data_t {
   int_ rc;
   int tag;
   union {
      struct _fx_rNt6option1N10Ast__typ_t_data_t* TypVar;
      struct _fx_Nt6option1N10Ast__typ_t_data_t* TypVarTuple;
      struct _fx_N10Ast__typ_t_data_t* TypVarArray;
      int_ TypSInt;
      int_ TypUInt;
      int_ TypFloat;
      struct _fx_T2LN10Ast__typ_tN10Ast__typ_t TypFun;
      struct _fx_N10Ast__typ_t_data_t* TypList;
      struct _fx_N10Ast__typ_t_data_t* TypVector;
      struct _fx_LN10Ast__typ_t_data_t* TypTuple;
      struct _fx_N10Ast__typ_t_data_t* TypRef;
      struct _fx_T2iN10Ast__typ_t TypArray;
      struct _fx_rT2LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_tB_data_t* TypRecord;
      struct _fx_T2LN10Ast__typ_tR9Ast__id_t TypApp;
   } u;
} _fx_N10Ast__typ_t_data_t, *_fx_N10Ast__typ_t;

typedef struct _fx_N12Ast__cmpop_t {
   int tag;
} _fx_N12Ast__cmpop_t;

typedef struct _fx_N13Ast__binary_t_data_t {
   int_ rc;
   int tag;
   union {
      struct _fx_N12Ast__cmpop_t OpCmp;
      struct _fx_N12Ast__cmpop_t OpDotCmp;
      struct _fx_N13Ast__binary_t_data_t* OpAugBinary;
   } u;
} _fx_N13Ast__binary_t_data_t, *_fx_N13Ast__binary_t;

typedef struct _fx_N12Ast__unary_t {
   int tag;
} _fx_N12Ast__unary_t;

typedef struct _fx_N12Ast__sctyp_t {
   int tag;
} _fx_N12Ast__sctyp_t;

typedef struct _fx_N13Ast__intrin_t {
   int tag;
   union {
      struct _fx_R9Ast__id_t IntrinMath;
      struct _fx_N12Ast__sctyp_t IntrinSaturate;
   } u;
} _fx_N13Ast__intrin_t;

typedef struct _fx_N15Ast__for_make_t {
   int tag;
} _fx_N15Ast__for_make_t;

typedef struct _fx_R16Ast__for_flags_t {
   bool for_flag_parallel;
   struct _fx_N15Ast__for_make_t for_flag_make;
   bool for_flag_unzip;
   bool for_flag_fold;
   bool for_flag_nested;
} _fx_R16Ast__for_flags_t;

typedef struct _fx_N13Ast__border_t {
   int tag;
} _fx_N13Ast__border_t;

typedef struct _fx_N18Ast__interpolate_t {
   int tag;
} _fx_N18Ast__interpolate_t;

typedef struct _fx_T2BR10Ast__loc_t {
   bool t0;
   struct _fx_R10Ast__loc_t t1;
} _fx_T2BR10Ast__loc_t;

typedef struct _fx_T2Nt6option1N10Ast__exp_tR10Ast__loc_t {
   struct _fx_Nt6option1N10Ast__exp_t_data_t* t0;
   struct _fx_R10Ast__loc_t t1;
} _fx_T2Nt6option1N10Ast__exp_tR10Ast__loc_t;

typedef struct _fx_T2N10Ast__typ_tR10Ast__loc_t {
   struct _fx_N10Ast__typ_t_data_t* t0;
   struct _fx_R10Ast__loc_t t1;
} _fx_T2N10Ast__typ_tR10Ast__loc_t;

typedef struct _fx_T4Nt6option1N10Ast__exp_tNt6option1N10Ast__exp_tNt6option1N10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t {
   struct _fx_Nt6option1N10Ast__exp_t_data_t* t0;
   struct _fx_Nt6option1N10Ast__exp_t_data_t* t1;
   struct _fx_Nt6option1N10Ast__exp_t_data_t* t2;
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t t3;
} _fx_T4Nt6option1N10Ast__exp_tNt6option1N10Ast__exp_tNt6option1N10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t;

typedef struct _fx_T2N10Ast__lit_tT2N10Ast__typ_tR10Ast__loc_t {
   struct _fx_N10Ast__lit_t t0;
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t t1;
} _fx_T2N10Ast__lit_tT2N10Ast__typ_tR10Ast__loc_t;

typedef struct _fx_T2R9Ast__id_tT2N10Ast__typ_tR10Ast__loc_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t t1;
} _fx_T2R9Ast__id_tT2N10Ast__typ_tR10Ast__loc_t;

typedef struct _fx_T4N13Ast__binary_tN10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t {
   struct _fx_N13Ast__binary_t_data_t* t0;
   struct _fx_N10Ast__exp_t_data_t* t1;
   struct _fx_N10Ast__exp_t_data_t* t2;
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t t3;
} _fx_T4N13Ast__binary_tN10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t;

typedef struct _fx_T3N12Ast__unary_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t {
   struct _fx_N12Ast__unary_t t0;
   struct _fx_N10Ast__exp_t_data_t* t1;
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t t2;
} _fx_T3N12Ast__unary_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t;

typedef struct _fx_LN10Ast__exp_t_data_t {
   int_ rc;
   struct _fx_LN10Ast__exp_t_data_t* tl;
   struct _fx_N10Ast__exp_t_data_t* hd;
} _fx_LN10Ast__exp_t_data_t, *_fx_LN10Ast__exp_t;

typedef struct _fx_T3N13Ast__intrin_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t {
   struct _fx_N13Ast__intrin_t t0;
   struct _fx_LN10Ast__exp_t_data_t* t1;
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t t2;
} _fx_T3N13Ast__intrin_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t;

typedef struct _fx_T2R9Ast__id_tN10Ast__exp_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_N10Ast__exp_t_data_t* t1;
} _fx_T2R9Ast__id_tN10Ast__exp_t;

typedef struct _fx_T2LN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t {
   struct _fx_LN10Ast__exp_t_data_t* t0;
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t t1;
} _fx_T2LN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t;

typedef struct _fx_LLN10Ast__exp_t_data_t {
   int_ rc;
   struct _fx_LLN10Ast__exp_t_data_t* tl;
   struct _fx_LN10Ast__exp_t_data_t* hd;
} _fx_LLN10Ast__exp_t_data_t, *_fx_LLN10Ast__exp_t;

typedef struct _fx_T2LLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t {
   struct _fx_LLN10Ast__exp_t_data_t* t0;
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t t1;
} _fx_T2LLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t;

typedef struct _fx_LT2R9Ast__id_tN10Ast__exp_t_data_t {
   int_ rc;
   struct _fx_LT2R9Ast__id_tN10Ast__exp_t_data_t* tl;
   struct _fx_T2R9Ast__id_tN10Ast__exp_t hd;
} _fx_LT2R9Ast__id_tN10Ast__exp_t_data_t, *_fx_LT2R9Ast__id_tN10Ast__exp_t;

typedef struct _fx_T3N10Ast__exp_tLT2R9Ast__id_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t {
   struct _fx_N10Ast__exp_t_data_t* t0;
   struct _fx_LT2R9Ast__id_tN10Ast__exp_t_data_t* t1;
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t t2;
} _fx_T3N10Ast__exp_tLT2R9Ast__id_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t;

typedef struct _fx_T3N10Ast__exp_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t {
   struct _fx_N10Ast__exp_t_data_t* t0;
   struct _fx_LN10Ast__exp_t_data_t* t1;
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t t2;
} _fx_T3N10Ast__exp_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t;

typedef struct _fx_T5N10Ast__exp_tN13Ast__border_tN18Ast__interpolate_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t {
   struct _fx_N10Ast__exp_t_data_t* t0;
   struct _fx_N13Ast__border_t t1;
   struct _fx_N18Ast__interpolate_t t2;
   struct _fx_LN10Ast__exp_t_data_t* t3;
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t t4;
} _fx_T5N10Ast__exp_tN13Ast__border_tN18Ast__interpolate_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t;

typedef struct _fx_T3N10Ast__exp_tN10Ast__exp_tR10Ast__loc_t {
   struct _fx_N10Ast__exp_t_data_t* t0;
   struct _fx_N10Ast__exp_t_data_t* t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3N10Ast__exp_tN10Ast__exp_tR10Ast__loc_t;

typedef struct _fx_T3N10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t {
   struct _fx_N10Ast__exp_t_data_t* t0;
   struct _fx_N10Ast__exp_t_data_t* t1;
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t t2;
} _fx_T3N10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t;

typedef struct _fx_T2N10Ast__exp_tR10Ast__loc_t {
   struct _fx_N10Ast__exp_t_data_t* t0;
   struct _fx_R10Ast__loc_t t1;
} _fx_T2N10Ast__exp_tR10Ast__loc_t;

typedef struct _fx_T4N10Ast__exp_tN10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t {
   struct _fx_N10Ast__exp_t_data_t* t0;
   struct _fx_N10Ast__exp_t_data_t* t1;
   struct _fx_N10Ast__exp_t_data_t* t2;
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t t3;
} _fx_T4N10Ast__exp_tN10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t;

typedef struct _fx_T2N10Ast__pat_tN10Ast__exp_t {
   struct _fx_N10Ast__pat_t_data_t* t0;
   struct _fx_N10Ast__exp_t_data_t* t1;
} _fx_T2N10Ast__pat_tN10Ast__exp_t;

typedef struct _fx_LT2N10Ast__pat_tN10Ast__exp_t_data_t {
   int_ rc;
   struct _fx_LT2N10Ast__pat_tN10Ast__exp_t_data_t* tl;
   struct _fx_T2N10Ast__pat_tN10Ast__exp_t hd;
} _fx_LT2N10Ast__pat_tN10Ast__exp_t_data_t, *_fx_LT2N10Ast__pat_tN10Ast__exp_t;

typedef struct _fx_T5LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_tN10Ast__exp_tR16Ast__for_flags_tR10Ast__loc_t {
   struct _fx_LT2N10Ast__pat_tN10Ast__exp_t_data_t* t0;
   struct _fx_N10Ast__pat_t_data_t* t1;
   struct _fx_N10Ast__exp_t_data_t* t2;
   struct _fx_R16Ast__for_flags_t t3;
   struct _fx_R10Ast__loc_t t4;
} _fx_T5LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_tN10Ast__exp_tR16Ast__for_flags_tR10Ast__loc_t;

typedef struct _fx_T2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t {
   struct _fx_LT2N10Ast__pat_tN10Ast__exp_t_data_t* t0;
   struct _fx_N10Ast__pat_t_data_t* t1;
} _fx_T2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t;

typedef struct _fx_LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t_data_t {
   int_ rc;
   struct _fx_LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t_data_t* tl;
   struct _fx_T2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t hd;
} _fx_LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t_data_t, *_fx_LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t;

typedef struct _fx_T4LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_tN10Ast__exp_tR16Ast__for_flags_tT2N10Ast__typ_tR10Ast__loc_t {
   struct _fx_LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t_data_t* t0;
   struct _fx_N10Ast__exp_t_data_t* t1;
   struct _fx_R16Ast__for_flags_t t2;
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t t3;
} _fx_T4LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_tN10Ast__exp_tR16Ast__for_flags_tT2N10Ast__typ_tR10Ast__loc_t;

typedef struct _fx_T3N10Ast__exp_tLT2N10Ast__pat_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t {
   struct _fx_N10Ast__exp_t_data_t* t0;
   struct _fx_LT2N10Ast__pat_tN10Ast__exp_t_data_t* t1;
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t t2;
} _fx_T3N10Ast__exp_tLT2N10Ast__pat_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t;

typedef struct _fx_T3N10Ast__exp_tN10Ast__typ_tT2N10Ast__typ_tR10Ast__loc_t {
   struct _fx_N10Ast__exp_t_data_t* t0;
   struct _fx_N10Ast__typ_t_data_t* t1;
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t t2;
} _fx_T3N10Ast__exp_tN10Ast__typ_tT2N10Ast__typ_tR10Ast__loc_t;

typedef struct _fx_T2ST2N10Ast__typ_tR10Ast__loc_t {
   fx_str_t t0;
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t t1;
} _fx_T2ST2N10Ast__typ_tR10Ast__loc_t;

typedef struct _fx_T3SST2N10Ast__typ_tR10Ast__loc_t {
   fx_str_t t0;
   fx_str_t t1;
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t t2;
} _fx_T3SST2N10Ast__typ_tR10Ast__loc_t;

typedef struct _fx_T4N10Ast__pat_tN10Ast__exp_tR16Ast__val_flags_tR10Ast__loc_t {
   struct _fx_N10Ast__pat_t_data_t* t0;
   struct _fx_N10Ast__exp_t_data_t* t1;
   struct _fx_R16Ast__val_flags_t t2;
   struct _fx_R10Ast__loc_t t3;
} _fx_T4N10Ast__pat_tN10Ast__exp_tR16Ast__val_flags_tR10Ast__loc_t;

typedef struct _fx_T2iR9Ast__id_t {
   int_ t0;
   struct _fx_R9Ast__id_t t1;
} _fx_T2iR9Ast__id_t;

typedef struct _fx_LT2iR9Ast__id_t_data_t {
   int_ rc;
   struct _fx_LT2iR9Ast__id_t_data_t* tl;
   struct _fx_T2iR9Ast__id_t hd;
} _fx_LT2iR9Ast__id_t_data_t, *_fx_LT2iR9Ast__id_t;

typedef struct _fx_T2LT2iR9Ast__id_tR10Ast__loc_t {
   struct _fx_LT2iR9Ast__id_t_data_t* t0;
   struct _fx_R10Ast__loc_t t1;
} _fx_T2LT2iR9Ast__id_tR10Ast__loc_t;

typedef struct _fx_T3iLR9Ast__id_tR10Ast__loc_t {
   int_ t0;
   struct _fx_LR9Ast__id_t_data_t* t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3iLR9Ast__id_tR10Ast__loc_t;

typedef struct _fx_T2LSR10Ast__loc_t {
   struct _fx_LS_data_t* t0;
   struct _fx_R10Ast__loc_t t1;
} _fx_T2LSR10Ast__loc_t;

typedef struct _fx_N10Ast__exp_t_data_t {
   int_ rc;
   int tag;
   union {
      struct _fx_R10Ast__loc_t ExpNop;
      struct _fx_T2BR10Ast__loc_t ExpBreak;
      struct _fx_R10Ast__loc_t ExpContinue;
      struct _fx_T2Nt6option1N10Ast__exp_tR10Ast__loc_t ExpReturn;
      struct _fx_T4Nt6option1N10Ast__exp_tNt6option1N10Ast__exp_tNt6option1N10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t ExpRange;
      struct _fx_T2N10Ast__lit_tT2N10Ast__typ_tR10Ast__loc_t ExpLit;
      struct _fx_T2R9Ast__id_tT2N10Ast__typ_tR10Ast__loc_t ExpIdent;
      struct _fx_T4N13Ast__binary_tN10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t ExpBinary;
      struct _fx_T3N12Ast__unary_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t ExpUnary;
      struct _fx_T3N13Ast__intrin_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t ExpIntrin;
      struct _fx_T2R9Ast__id_tN10Ast__exp_t ExpSync;
      struct _fx_T2LN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t ExpSeq;
      struct _fx_T2LN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t ExpMkTuple;
      struct _fx_T2LLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t ExpMkArray;
      struct _fx_T2LN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t ExpMkVector;
      struct _fx_T3N10Ast__exp_tLT2R9Ast__id_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t ExpMkRecord;
      struct _fx_T3N10Ast__exp_tLT2R9Ast__id_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t ExpUpdateRecord;
      struct _fx_T3N10Ast__exp_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t ExpCall;
      struct _fx_T5N10Ast__exp_tN13Ast__border_tN18Ast__interpolate_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t ExpAt;
      struct _fx_T3N10Ast__exp_tN10Ast__exp_tR10Ast__loc_t ExpAssign;
      struct _fx_T3N10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t ExpMem;
      struct _fx_T2N10Ast__exp_tR10Ast__loc_t ExpThrow;
      struct _fx_T4N10Ast__exp_tN10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t ExpIf;
      struct _fx_T3N10Ast__exp_tN10Ast__exp_tR10Ast__loc_t ExpWhile;
      struct _fx_T3N10Ast__exp_tN10Ast__exp_tR10Ast__loc_t ExpDoWhile;
      struct _fx_T5LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_tN10Ast__exp_tR16Ast__for_flags_tR10Ast__loc_t ExpFor;
      struct _fx_T4LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_tN10Ast__exp_tR16Ast__for_flags_tT2N10Ast__typ_tR10Ast__loc_t
         ExpMap;
      struct _fx_T3N10Ast__exp_tLT2N10Ast__pat_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t ExpTryCatch;
      struct _fx_T3N10Ast__exp_tLT2N10Ast__pat_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t ExpMatch;
      struct _fx_T3N10Ast__exp_tN10Ast__typ_tT2N10Ast__typ_tR10Ast__loc_t ExpCast;
      struct _fx_T3N10Ast__exp_tN10Ast__typ_tT2N10Ast__typ_tR10Ast__loc_t ExpTyped;
      struct _fx_T2ST2N10Ast__typ_tR10Ast__loc_t ExpCCode;
      struct _fx_T3SST2N10Ast__typ_tR10Ast__loc_t ExpData;
      struct _fx_T4N10Ast__pat_tN10Ast__exp_tR16Ast__val_flags_tR10Ast__loc_t DefVal;
      struct _fx_rR13Ast__deffun_t_data_t* DefFun;
      struct _fx_rR13Ast__defexn_t_data_t* DefExn;
      struct _fx_rR13Ast__deftyp_t_data_t* DefTyp;
      struct _fx_rR17Ast__defvariant_t_data_t* DefVariant;
      struct _fx_rR19Ast__definterface_t_data_t* DefInterface;
      struct _fx_T2LT2iR9Ast__id_tR10Ast__loc_t DirImport;
      struct _fx_T3iLR9Ast__id_tR10Ast__loc_t DirImportFrom;
      struct _fx_T2LSR10Ast__loc_t DirPragma;
   } u;
} _fx_N10Ast__exp_t_data_t, *_fx_N10Ast__exp_t;

typedef struct _fx_T2N10Ast__lit_tR10Ast__loc_t {
   struct _fx_N10Ast__lit_t t0;
   struct _fx_R10Ast__loc_t t1;
} _fx_T2N10Ast__lit_tR10Ast__loc_t;

typedef struct _fx_T2R9Ast__id_tR10Ast__loc_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_R10Ast__loc_t t1;
} _fx_T2R9Ast__id_tR10Ast__loc_t;

typedef struct _fx_T2LN10Ast__pat_tR10Ast__loc_t {
   struct _fx_LN10Ast__pat_t_data_t* t0;
   struct _fx_R10Ast__loc_t t1;
} _fx_T2LN10Ast__pat_tR10Ast__loc_t;

typedef struct _fx_T3R9Ast__id_tLN10Ast__pat_tR10Ast__loc_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_LN10Ast__pat_t_data_t* t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3R9Ast__id_tLN10Ast__pat_tR10Ast__loc_t;

typedef struct _fx_T2R9Ast__id_tN10Ast__pat_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_N10Ast__pat_t_data_t* t1;
} _fx_T2R9Ast__id_tN10Ast__pat_t;

typedef struct _fx_LT2R9Ast__id_tN10Ast__pat_t_data_t {
   int_ rc;
   struct _fx_LT2R9Ast__id_tN10Ast__pat_t_data_t* tl;
   struct _fx_T2R9Ast__id_tN10Ast__pat_t hd;
} _fx_LT2R9Ast__id_tN10Ast__pat_t_data_t, *_fx_LT2R9Ast__id_tN10Ast__pat_t;

typedef struct _fx_T3Nt6option1R9Ast__id_tLT2R9Ast__id_tN10Ast__pat_tR10Ast__loc_t {
   struct _fx_Nt6option1R9Ast__id_t t0;
   struct _fx_LT2R9Ast__id_tN10Ast__pat_t_data_t* t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3Nt6option1R9Ast__id_tLT2R9Ast__id_tN10Ast__pat_tR10Ast__loc_t;

typedef struct _fx_T3N10Ast__pat_tN10Ast__pat_tR10Ast__loc_t {
   struct _fx_N10Ast__pat_t_data_t* t0;
   struct _fx_N10Ast__pat_t_data_t* t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3N10Ast__pat_tN10Ast__pat_tR10Ast__loc_t;

typedef struct _fx_T3N10Ast__pat_tR9Ast__id_tR10Ast__loc_t {
   struct _fx_N10Ast__pat_t_data_t* t0;
   struct _fx_R9Ast__id_t t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3N10Ast__pat_tR9Ast__id_tR10Ast__loc_t;

typedef struct _fx_T3N10Ast__pat_tN10Ast__typ_tR10Ast__loc_t {
   struct _fx_N10Ast__pat_t_data_t* t0;
   struct _fx_N10Ast__typ_t_data_t* t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3N10Ast__pat_tN10Ast__typ_tR10Ast__loc_t;

typedef struct _fx_T3N10Ast__pat_tN10Ast__exp_tR10Ast__loc_t {
   struct _fx_N10Ast__pat_t_data_t* t0;
   struct _fx_N10Ast__exp_t_data_t* t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3N10Ast__pat_tN10Ast__exp_tR10Ast__loc_t;

typedef struct _fx_T2N10Ast__pat_tR10Ast__loc_t {
   struct _fx_N10Ast__pat_t_data_t* t0;
   struct _fx_R10Ast__loc_t t1;
} _fx_T2N10Ast__pat_tR10Ast__loc_t;

typedef struct _fx_N10Ast__pat_t_data_t {
   int_ rc;
   int tag;
   union {
      struct _fx_R10Ast__loc_t PatAny;
      struct _fx_T2N10Ast__lit_tR10Ast__loc_t PatLit;
      struct _fx_T2R9Ast__id_tR10Ast__loc_t PatIdent;
      struct _fx_T2LN10Ast__pat_tR10Ast__loc_t PatTuple;
      struct _fx_T3R9Ast__id_tLN10Ast__pat_tR10Ast__loc_t PatVariant;
      struct _fx_T3Nt6option1R9Ast__id_tLT2R9Ast__id_tN10Ast__pat_tR10Ast__loc_t PatRecord;
      struct _fx_T3N10Ast__pat_tN10Ast__pat_tR10Ast__loc_t PatCons;
      struct _fx_T3N10Ast__pat_tR9Ast__id_tR10Ast__loc_t PatAs;
      struct _fx_T3N10Ast__pat_tN10Ast__typ_tR10Ast__loc_t PatTyped;
      struct _fx_T3N10Ast__pat_tN10Ast__exp_tR10Ast__loc_t PatWhen;
      struct _fx_T2LN10Ast__pat_tR10Ast__loc_t PatAlt;
      struct _fx_T2N10Ast__pat_tR10Ast__loc_t PatRef;
   } u;
} _fx_N10Ast__pat_t_data_t, *_fx_N10Ast__pat_t;

typedef struct _fx_N16Ast__env_entry_t_data_t {
   int_ rc;
   int tag;
   union {
      struct _fx_R9Ast__id_t EnvId;
      struct _fx_N10Ast__typ_t_data_t* EnvTyp;
   } u;
} _fx_N16Ast__env_entry_t_data_t, *_fx_N16Ast__env_entry_t;

typedef struct _fx_Li_data_t {
   int_ rc;
   struct _fx_Li_data_t* tl;
   int_ hd;
} _fx_Li_data_t, *_fx_Li;

typedef struct _fx_T10R9Ast__id_tSiBLN10Ast__exp_tLiRt6Map__t2R9Ast__id_tLN16Ast__env_entry_tBiNt9Dynvec__t1N14Ast__id_info_t {
   struct _fx_R9Ast__id_t t0;
   fx_str_t t1;
   int_ t2;
   bool t3;
   struct _fx_LN10Ast__exp_t_data_t* t4;
   struct _fx_Li_data_t* t5;
   struct _fx_Rt6Map__t2R9Ast__id_tLN16Ast__env_entry_t t6;
   bool t7;
   int_ t8;
   struct _fx_Nt9Dynvec__t1N14Ast__id_info_t_data_t* t9;
} _fx_T10R9Ast__id_tSiBLN10Ast__exp_tLiRt6Map__t2R9Ast__id_tLN16Ast__env_entry_tBiNt9Dynvec__t1N14Ast__id_info_t;

typedef struct _fx_N16Ast__defmodule_t_data_t {
   int_ rc;
   union {
      struct _fx_T10R9Ast__id_tSiBLN10Ast__exp_tLiRt6Map__t2R9Ast__id_tLN16Ast__env_entry_tBiNt9Dynvec__t1N14Ast__id_info_t
         defmodule_t;
   } u;
} _fx_N16Ast__defmodule_t_data_t, *_fx_N16Ast__defmodule_t;

typedef struct _fx_LR10Ast__loc_t_data_t {
   int_ rc;
   struct _fx_LR10Ast__loc_t_data_t* tl;
   struct _fx_R10Ast__loc_t hd;
} _fx_LR10Ast__loc_t_data_t, *_fx_LR10Ast__loc_t;

typedef struct _fx_N14K_form__klit_t {
   int tag;
   union {
      int64_t KLitInt;
      struct _fx_T2il KLitSInt;
      struct _fx_T2iq KLitUInt;
      struct _fx_T2id KLitFloat;
      fx_str_t KLitString;
      char_ KLitChar;
      bool KLitBool;
      struct _fx_N14K_form__ktyp_t_data_t* KLitNil;
   } u;
} _fx_N14K_form__klit_t;

typedef struct _fx_N14K_form__atom_t {
   int tag;
   union {
      struct _fx_R9Ast__id_t AtomId;
      struct _fx_N14K_form__klit_t AtomLit;
   } u;
} _fx_N14K_form__atom_t;

typedef struct _fx_Nt6option1N14K_form__atom_t {
   int tag;
   union {
      struct _fx_N14K_form__atom_t Some;
   } u;
} _fx_Nt6option1N14K_form__atom_t;

typedef struct _fx_LN14K_form__kexp_t_data_t {
   int_ rc;
   struct _fx_LN14K_form__kexp_t_data_t* tl;
   struct _fx_N14K_form__kexp_t_data_t* hd;
} _fx_LN14K_form__kexp_t_data_t, *_fx_LN14K_form__kexp_t;

typedef struct _fx_T2BN14K_form__atom_t {
   bool t0;
   struct _fx_N14K_form__atom_t t1;
} _fx_T2BN14K_form__atom_t;

typedef struct _fx_LT2BN14K_form__atom_t_data_t {
   int_ rc;
   struct _fx_LT2BN14K_form__atom_t_data_t* tl;
   struct _fx_T2BN14K_form__atom_t hd;
} _fx_LT2BN14K_form__atom_t_data_t, *_fx_LT2BN14K_form__atom_t;

typedef struct _fx_T2LN14K_form__ktyp_tN14K_form__ktyp_t {
   struct _fx_LN14K_form__ktyp_t_data_t* t0;
   struct _fx_N14K_form__ktyp_t_data_t* t1;
} _fx_T2LN14K_form__ktyp_tN14K_form__ktyp_t;

typedef struct _fx_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* t1;
} _fx_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t;

typedef struct _fx_T2iN14K_form__ktyp_t {
   int_ t0;
   struct _fx_N14K_form__ktyp_t_data_t* t1;
} _fx_T2iN14K_form__ktyp_t;

typedef struct _fx_N14K_form__ktyp_t_data_t {
   int_ rc;
   int tag;
   union {
      int_ KTypSInt;
      int_ KTypUInt;
      int_ KTypFloat;
      struct _fx_N14K_form__ktyp_t_data_t* KTypRawPointer;
      struct _fx_T2LN14K_form__ktyp_tN14K_form__ktyp_t KTypFun;
      struct _fx_LN14K_form__ktyp_t_data_t* KTypTuple;
      struct _fx_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t KTypRecord;
      struct _fx_R9Ast__id_t KTypName;
      struct _fx_T2iN14K_form__ktyp_t KTypArray;
      struct _fx_N14K_form__ktyp_t_data_t* KTypVector;
      struct _fx_N14K_form__ktyp_t_data_t* KTypList;
      struct _fx_N14K_form__ktyp_t_data_t* KTypRef;
   } u;
} _fx_N14K_form__ktyp_t_data_t, *_fx_N14K_form__ktyp_t;

typedef struct _fx_Ta3N14K_form__atom_t {
   struct _fx_N14K_form__atom_t t0;
   struct _fx_N14K_form__atom_t t1;
   struct _fx_N14K_form__atom_t t2;
} _fx_Ta3N14K_form__atom_t;

typedef struct _fx_N13K_form__dom_t {
   int tag;
   union {
      struct _fx_N14K_form__atom_t DomainElem;
      struct _fx_N14K_form__atom_t DomainFast;
      struct _fx_Ta3N14K_form__atom_t DomainRange;
   } u;
} _fx_N13K_form__dom_t;

typedef struct _fx_T2Nt6option1N14K_form__atom_tR10Ast__loc_t {
   struct _fx_Nt6option1N14K_form__atom_t t0;
   struct _fx_R10Ast__loc_t t1;
} _fx_T2Nt6option1N14K_form__atom_tR10Ast__loc_t;

typedef struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_N14K_form__ktyp_t_data_t* t0;
   struct _fx_R10Ast__loc_t t1;
} _fx_T2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_N14K_form__atom_t t0;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t1;
} _fx_T2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T4N13Ast__binary_tN14K_form__atom_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_N13Ast__binary_t_data_t* t0;
   struct _fx_N14K_form__atom_t t1;
   struct _fx_N14K_form__atom_t t2;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t3;
} _fx_T4N13Ast__binary_tN14K_form__atom_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_N12Ast__unary_t t0;
   struct _fx_N14K_form__atom_t t1;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t2;
} _fx_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_LN14K_form__atom_t_data_t {
   int_ rc;
   struct _fx_LN14K_form__atom_t_data_t* tl;
   struct _fx_N14K_form__atom_t hd;
} _fx_LN14K_form__atom_t_data_t, *_fx_LN14K_form__atom_t;

typedef struct _fx_T3N13Ast__intrin_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_N13Ast__intrin_t t0;
   struct _fx_LN14K_form__atom_t_data_t* t1;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t2;
} _fx_T3N13Ast__intrin_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T2R9Ast__id_tN14K_form__kexp_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_N14K_form__kexp_t_data_t* t1;
} _fx_T2R9Ast__id_tN14K_form__kexp_t;

typedef struct _fx_T2LN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_LN14K_form__kexp_t_data_t* t0;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t1;
} _fx_T2LN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T4N14K_form__kexp_tN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_N14K_form__kexp_t_data_t* t0;
   struct _fx_N14K_form__kexp_t_data_t* t1;
   struct _fx_N14K_form__kexp_t_data_t* t2;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t3;
} _fx_T4N14K_form__kexp_tN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T3R9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_LN14K_form__atom_t_data_t* t1;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t2;
} _fx_T3R9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T4R9Ast__id_tiLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_R9Ast__id_t t0;
   int_ t1;
   struct _fx_LN14K_form__atom_t_data_t* t2;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t3;
} _fx_T4R9Ast__id_tiLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_LN14K_form__atom_t_data_t* t0;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t1;
} _fx_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T4R9Ast__id_tR9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_R9Ast__id_t t1;
   struct _fx_LN14K_form__atom_t_data_t* t2;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t3;
} _fx_T4R9Ast__id_tR9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_LLT2BN14K_form__atom_t_data_t {
   int_ rc;
   struct _fx_LLT2BN14K_form__atom_t_data_t* tl;
   struct _fx_LT2BN14K_form__atom_t_data_t* hd;
} _fx_LLT2BN14K_form__atom_t_data_t, *_fx_LLT2BN14K_form__atom_t;

typedef struct _fx_T3BLLT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t {
   bool t0;
   struct _fx_LLT2BN14K_form__atom_t_data_t* t1;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t2;
} _fx_T3BLLT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T2LT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_LT2BN14K_form__atom_t_data_t* t0;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t1;
} _fx_T2LT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_LN13K_form__dom_t_data_t {
   int_ rc;
   struct _fx_LN13K_form__dom_t_data_t* tl;
   struct _fx_N13K_form__dom_t hd;
} _fx_LN13K_form__dom_t_data_t, *_fx_LN13K_form__dom_t;

typedef struct _fx_T5N14K_form__atom_tN13Ast__border_tN18Ast__interpolate_tLN13K_form__dom_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_N14K_form__atom_t t0;
   struct _fx_N13Ast__border_t t1;
   struct _fx_N18Ast__interpolate_t t2;
   struct _fx_LN13K_form__dom_t_data_t* t3;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t4;
} _fx_T5N14K_form__atom_tN13Ast__border_tN18Ast__interpolate_tLN13K_form__dom_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T3R9Ast__id_tiT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_R9Ast__id_t t0;
   int_ t1;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t2;
} _fx_T3R9Ast__id_tiT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T3R9Ast__id_tN14K_form__atom_tR10Ast__loc_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_N14K_form__atom_t t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3R9Ast__id_tN14K_form__atom_tR10Ast__loc_t;

typedef struct _fx_T2LN14K_form__kexp_tN14K_form__kexp_t {
   struct _fx_LN14K_form__kexp_t_data_t* t0;
   struct _fx_N14K_form__kexp_t_data_t* t1;
} _fx_T2LN14K_form__kexp_tN14K_form__kexp_t;

typedef struct _fx_LT2LN14K_form__kexp_tN14K_form__kexp_t_data_t {
   int_ rc;
   struct _fx_LT2LN14K_form__kexp_tN14K_form__kexp_t_data_t* tl;
   struct _fx_T2LN14K_form__kexp_tN14K_form__kexp_t hd;
} _fx_LT2LN14K_form__kexp_tN14K_form__kexp_t_data_t, *_fx_LT2LN14K_form__kexp_tN14K_form__kexp_t;

typedef struct _fx_T2LT2LN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_LT2LN14K_form__kexp_tN14K_form__kexp_t_data_t* t0;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t1;
} _fx_T2LT2LN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_N14K_form__kexp_t_data_t* t0;
   struct _fx_N14K_form__kexp_t_data_t* t1;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t2;
} _fx_T3N14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T3R9Ast__id_tBR10Ast__loc_t {
   struct _fx_R9Ast__id_t t0;
   bool t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3R9Ast__id_tBR10Ast__loc_t;

typedef struct _fx_T3N14K_form__atom_tN14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_N14K_form__atom_t t0;
   struct _fx_N14K_form__ktyp_t_data_t* t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3N14K_form__atom_tN14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T2R9Ast__id_tN13K_form__dom_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_N13K_form__dom_t t1;
} _fx_T2R9Ast__id_tN13K_form__dom_t;

typedef struct _fx_LT2R9Ast__id_tN13K_form__dom_t_data_t {
   int_ rc;
   struct _fx_LT2R9Ast__id_tN13K_form__dom_t_data_t* tl;
   struct _fx_T2R9Ast__id_tN13K_form__dom_t hd;
} _fx_LT2R9Ast__id_tN13K_form__dom_t_data_t, *_fx_LT2R9Ast__id_tN13K_form__dom_t;

typedef struct _fx_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t {
   struct _fx_N14K_form__kexp_t_data_t* t0;
   struct _fx_LT2R9Ast__id_tN13K_form__dom_t_data_t* t1;
   struct _fx_LR9Ast__id_t_data_t* t2;
} _fx_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t;

typedef struct _fx_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t_data_t {
   int_ rc;
   struct _fx_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t_data_t* tl;
   struct _fx_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t hd;
} _fx_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t_data_t, *_fx_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t;

typedef struct _fx_T4LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t_data_t* t0;
   struct _fx_N14K_form__kexp_t_data_t* t1;
   struct _fx_R16Ast__for_flags_t t2;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t3;
} _fx_T4LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T5LT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tR10Ast__loc_t {
   struct _fx_LT2R9Ast__id_tN13K_form__dom_t_data_t* t0;
   struct _fx_LR9Ast__id_t_data_t* t1;
   struct _fx_N14K_form__kexp_t_data_t* t2;
   struct _fx_R16Ast__for_flags_t t3;
   struct _fx_R10Ast__loc_t t4;
} _fx_T5LT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tR10Ast__loc_t;

typedef struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t {
   struct _fx_N14K_form__kexp_t_data_t* t0;
   struct _fx_N14K_form__kexp_t_data_t* t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t;

typedef struct _fx_T2ST2N14K_form__ktyp_tR10Ast__loc_t {
   fx_str_t t0;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t1;
} _fx_T2ST2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T3R9Ast__id_tN14K_form__kexp_tR10Ast__loc_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_N14K_form__kexp_t_data_t* t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3R9Ast__id_tN14K_form__kexp_tR10Ast__loc_t;

typedef struct _fx_N14K_form__kexp_t_data_t {
   int_ rc;
   int tag;
   union {
      struct _fx_R10Ast__loc_t KExpNop;
      struct _fx_R10Ast__loc_t KExpBreak;
      struct _fx_R10Ast__loc_t KExpContinue;
      struct _fx_T2Nt6option1N14K_form__atom_tR10Ast__loc_t KExpReturn;
      struct _fx_T2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t KExpAtom;
      struct _fx_T4N13Ast__binary_tN14K_form__atom_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t KExpBinary;
      struct _fx_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t KExpUnary;
      struct _fx_T3N13Ast__intrin_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t KExpIntrin;
      struct _fx_T2R9Ast__id_tN14K_form__kexp_t KExpSync;
      struct _fx_T2LN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t KExpSeq;
      struct _fx_T4N14K_form__kexp_tN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t KExpIf;
      struct _fx_T3R9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t KExpCall;
      struct _fx_T4R9Ast__id_tiLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t KExpICall;
      struct _fx_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t KExpMkTuple;
      struct _fx_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t KExpMkRecord;
      struct _fx_T4R9Ast__id_tR9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t KExpMkClosure;
      struct _fx_T3BLLT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t KExpMkArray;
      struct _fx_T2LT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t KExpMkVector;
      struct _fx_T5N14K_form__atom_tN13Ast__border_tN18Ast__interpolate_tLN13K_form__dom_tT2N14K_form__ktyp_tR10Ast__loc_t
         KExpAt;
      struct _fx_T3R9Ast__id_tiT2N14K_form__ktyp_tR10Ast__loc_t KExpMem;
      struct _fx_T3R9Ast__id_tN14K_form__atom_tR10Ast__loc_t KExpAssign;
      struct _fx_T2LT2LN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t KExpMatch;
      struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t KExpTryCatch;
      struct _fx_T3R9Ast__id_tBR10Ast__loc_t KExpThrow;
      struct _fx_T3N14K_form__atom_tN14K_form__ktyp_tR10Ast__loc_t KExpCast;
      struct _fx_T4LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tT2N14K_form__ktyp_tR10Ast__loc_t
         KExpMap;
      struct _fx_T5LT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tR10Ast__loc_t KExpFor;
      struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t KExpWhile;
      struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t KExpDoWhile;
      struct _fx_T2ST2N14K_form__ktyp_tR10Ast__loc_t KExpCCode;
      struct _fx_T3R9Ast__id_tN14K_form__kexp_tR10Ast__loc_t KDefVal;
      struct _fx_rR17K_form__kdeffun_t_data_t* KDefFun;
      struct _fx_rR17K_form__kdefexn_t_data_t* KDefExn;
      struct _fx_rR21K_form__kdefvariant_t_data_t* KDefVariant;
      struct _fx_rR23K_form__kdefinterface_t_data_t* KDefInterface;
      struct _fx_rR17K_form__kdeftyp_t_data_t* KDefTyp;
      struct _fx_rR25K_form__kdefclosurevars_t_data_t* KDefClosureVars;
   } u;
} _fx_N14K_form__kexp_t_data_t, *_fx_N14K_form__kexp_t;

typedef struct _fx_Nt6option1rR23C_form__cdefinterface_t {
   int tag;
   union {
      struct _fx_rR23C_form__cdefinterface_t_data_t* Some;
   } u;
} _fx_Nt6option1rR23C_form__cdefinterface_t;

typedef struct _fx_R22C_form__c_fold_callb_t {
   struct _fx_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t_data_t* ccb_fold_ident;
   struct _fx_Nt6option1FPv2N14C_form__ctyp_tR22C_form__c_fold_callb_t_data_t* ccb_fold_typ;
   struct _fx_Nt6option1FPv2N14C_form__cexp_tR22C_form__c_fold_callb_t_data_t* ccb_fold_exp;
   struct _fx_Nt6option1FPv2N15C_form__cstmt_tR22C_form__c_fold_callb_t_data_t* ccb_fold_stmt;
} _fx_R22C_form__c_fold_callb_t;

typedef struct _fx_FPv2N15C_form__cstmt_tR22C_form__c_fold_callb_t {
   int (*fp)(struct _fx_N15C_form__cstmt_t_data_t*, struct _fx_R22C_form__c_fold_callb_t*, void*);
   fx_fcv_t* fcv;
} _fx_FPv2N15C_form__cstmt_tR22C_form__c_fold_callb_t;

typedef struct _fx_Nt6option1FPv2N15C_form__cstmt_tR22C_form__c_fold_callb_t_data_t {
   int_ rc;
   union {
      struct _fx_FPv2N15C_form__cstmt_tR22C_form__c_fold_callb_t Some;
   } u;
} _fx_Nt6option1FPv2N15C_form__cstmt_tR22C_form__c_fold_callb_t_data_t, *_fx_Nt6option1FPv2N15C_form__cstmt_tR22C_form__c_fold_callb_t;

typedef struct _fx_FPv2N14C_form__cexp_tR22C_form__c_fold_callb_t {
   int (*fp)(struct _fx_N14C_form__cexp_t_data_t*, struct _fx_R22C_form__c_fold_callb_t*, void*);
   fx_fcv_t* fcv;
} _fx_FPv2N14C_form__cexp_tR22C_form__c_fold_callb_t;

typedef struct _fx_Nt6option1FPv2N14C_form__cexp_tR22C_form__c_fold_callb_t_data_t {
   int_ rc;
   union {
      struct _fx_FPv2N14C_form__cexp_tR22C_form__c_fold_callb_t Some;
   } u;
} _fx_Nt6option1FPv2N14C_form__cexp_tR22C_form__c_fold_callb_t_data_t, *_fx_Nt6option1FPv2N14C_form__cexp_tR22C_form__c_fold_callb_t;

typedef struct _fx_FPv2N14C_form__ctyp_tR22C_form__c_fold_callb_t {
   int (*fp)(struct _fx_N14C_form__ctyp_t_data_t*, struct _fx_R22C_form__c_fold_callb_t*, void*);
   fx_fcv_t* fcv;
} _fx_FPv2N14C_form__ctyp_tR22C_form__c_fold_callb_t;

typedef struct _fx_Nt6option1FPv2N14C_form__ctyp_tR22C_form__c_fold_callb_t_data_t {
   int_ rc;
   union {
      struct _fx_FPv2N14C_form__ctyp_tR22C_form__c_fold_callb_t Some;
   } u;
} _fx_Nt6option1FPv2N14C_form__ctyp_tR22C_form__c_fold_callb_t_data_t, *_fx_Nt6option1FPv2N14C_form__ctyp_tR22C_form__c_fold_callb_t;

typedef struct _fx_FPv2R9Ast__id_tR22C_form__c_fold_callb_t {
   int (*fp)(struct _fx_R9Ast__id_t*, struct _fx_R22C_form__c_fold_callb_t*, void*);
   fx_fcv_t* fcv;
} _fx_FPv2R9Ast__id_tR22C_form__c_fold_callb_t;

typedef struct _fx_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t_data_t {
   int_ rc;
   union {
      struct _fx_FPv2R9Ast__id_tR22C_form__c_fold_callb_t Some;
   } u;
} _fx_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t_data_t, *_fx_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t;

typedef struct _fx_R17C_form__c_callb_t {
   struct _fx_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t_data_t* ccb_ident;
   struct _fx_Nt6option1FPN14C_form__ctyp_t2N14C_form__ctyp_tR17C_form__c_callb_t_data_t* ccb_typ;
   struct _fx_Nt6option1FPN14C_form__cexp_t2N14C_form__cexp_tR17C_form__c_callb_t_data_t* ccb_exp;
   struct _fx_Nt6option1FPN15C_form__cstmt_t2N15C_form__cstmt_tR17C_form__c_callb_t_data_t* ccb_stmt;
} _fx_R17C_form__c_callb_t;

typedef struct _fx_FPN15C_form__cstmt_t2N15C_form__cstmt_tR17C_form__c_callb_t {
   int (*fp)(
      struct _fx_N15C_form__cstmt_t_data_t*, struct _fx_R17C_form__c_callb_t*, struct _fx_N15C_form__cstmt_t_data_t**, void*);
   fx_fcv_t* fcv;
} _fx_FPN15C_form__cstmt_t2N15C_form__cstmt_tR17C_form__c_callb_t;

typedef struct _fx_Nt6option1FPN15C_form__cstmt_t2N15C_form__cstmt_tR17C_form__c_callb_t_data_t {
   int_ rc;
   union {
      struct _fx_FPN15C_form__cstmt_t2N15C_form__cstmt_tR17C_form__c_callb_t Some;
   } u;
} _fx_Nt6option1FPN15C_form__cstmt_t2N15C_form__cstmt_tR17C_form__c_callb_t_data_t, *_fx_Nt6option1FPN15C_form__cstmt_t2N15C_form__cstmt_tR17C_form__c_callb_t;

typedef struct _fx_FPN14C_form__cexp_t2N14C_form__cexp_tR17C_form__c_callb_t {
   int (*fp)(
      struct _fx_N14C_form__cexp_t_data_t*, struct _fx_R17C_form__c_callb_t*, struct _fx_N14C_form__cexp_t_data_t**, void*);
   fx_fcv_t* fcv;
} _fx_FPN14C_form__cexp_t2N14C_form__cexp_tR17C_form__c_callb_t;

typedef struct _fx_Nt6option1FPN14C_form__cexp_t2N14C_form__cexp_tR17C_form__c_callb_t_data_t {
   int_ rc;
   union {
      struct _fx_FPN14C_form__cexp_t2N14C_form__cexp_tR17C_form__c_callb_t Some;
   } u;
} _fx_Nt6option1FPN14C_form__cexp_t2N14C_form__cexp_tR17C_form__c_callb_t_data_t, *_fx_Nt6option1FPN14C_form__cexp_t2N14C_form__cexp_tR17C_form__c_callb_t;

typedef struct _fx_FPN14C_form__ctyp_t2N14C_form__ctyp_tR17C_form__c_callb_t {
   int (*fp)(
      struct _fx_N14C_form__ctyp_t_data_t*, struct _fx_R17C_form__c_callb_t*, struct _fx_N14C_form__ctyp_t_data_t**, void*);
   fx_fcv_t* fcv;
} _fx_FPN14C_form__ctyp_t2N14C_form__ctyp_tR17C_form__c_callb_t;

typedef struct _fx_Nt6option1FPN14C_form__ctyp_t2N14C_form__ctyp_tR17C_form__c_callb_t_data_t {
   int_ rc;
   union {
      struct _fx_FPN14C_form__ctyp_t2N14C_form__ctyp_tR17C_form__c_callb_t Some;
   } u;
} _fx_Nt6option1FPN14C_form__ctyp_t2N14C_form__ctyp_tR17C_form__c_callb_t_data_t, *_fx_Nt6option1FPN14C_form__ctyp_t2N14C_form__ctyp_tR17C_form__c_callb_t;

typedef struct _fx_FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t {
   int (*fp)(struct _fx_R9Ast__id_t*, struct _fx_R17C_form__c_callb_t*, struct _fx_R9Ast__id_t*, void*);
   fx_fcv_t* fcv;
} _fx_FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t;

typedef struct _fx_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t_data_t {
   int_ rc;
   union {
      struct _fx_FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t Some;
   } u;
} _fx_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t_data_t, *_fx_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t;

typedef struct _fx_Nt6option1N14C_form__ctyp_t {
   int tag;
   union {
      struct _fx_N14C_form__ctyp_t_data_t* Some;
   } u;
} _fx_Nt6option1N14C_form__ctyp_t;

typedef struct _fx_FPv1R9Ast__id_t {
   int (*fp)(struct _fx_R9Ast__id_t*, void*);
   fx_fcv_t* fcv;
} _fx_FPv1R9Ast__id_t;

typedef struct _fx_FPv1N15C_form__cstmt_t {
   int (*fp)(struct _fx_N15C_form__cstmt_t_data_t*, void*);
   fx_fcv_t* fcv;
} _fx_FPv1N15C_form__cstmt_t;

typedef struct _fx_FPR9Ast__id_t1R9Ast__id_t {
   int (*fp)(struct _fx_R9Ast__id_t*, struct _fx_R9Ast__id_t*, void*);
   fx_fcv_t* fcv;
} _fx_FPR9Ast__id_t1R9Ast__id_t;

typedef struct _fx_FPN15C_form__cstmt_t1N15C_form__cstmt_t {
   int (*fp)(struct _fx_N15C_form__cstmt_t_data_t*, struct _fx_N15C_form__cstmt_t_data_t**, void*);
   fx_fcv_t* fcv;
} _fx_FPN15C_form__cstmt_t1N15C_form__cstmt_t;

typedef struct _fx_T2SR10Ast__loc_t {
   fx_str_t t0;
   struct _fx_R10Ast__loc_t t1;
} _fx_T2SR10Ast__loc_t;

typedef struct _fx_N17C_form__cbinary_t {
   int tag;
   union {
      struct _fx_N12Ast__cmpop_t COpCmp;
   } u;
} _fx_N17C_form__cbinary_t;

typedef struct _fx_N16C_form__cunary_t {
   int tag;
} _fx_N16C_form__cunary_t;

typedef struct _fx_N19C_form__ctyp_attr_t {
   int tag;
} _fx_N19C_form__ctyp_attr_t;

typedef struct _fx_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t {
   struct _fx_Nt6option1R9Ast__id_t t0;
   struct _fx_LT2R9Ast__id_tN14C_form__ctyp_t_data_t* t1;
} _fx_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t;

typedef struct _fx_LN14C_form__ctyp_t_data_t {
   int_ rc;
   struct _fx_LN14C_form__ctyp_t_data_t* tl;
   struct _fx_N14C_form__ctyp_t_data_t* hd;
} _fx_LN14C_form__ctyp_t_data_t, *_fx_LN14C_form__ctyp_t;

typedef struct _fx_T2LN14C_form__ctyp_tN14C_form__ctyp_t {
   struct _fx_LN14C_form__ctyp_t_data_t* t0;
   struct _fx_N14C_form__ctyp_t_data_t* t1;
} _fx_T2LN14C_form__ctyp_tN14C_form__ctyp_t;

typedef struct _fx_LN19C_form__ctyp_attr_t_data_t {
   int_ rc;
   struct _fx_LN19C_form__ctyp_attr_t_data_t* tl;
   struct _fx_N19C_form__ctyp_attr_t hd;
} _fx_LN19C_form__ctyp_attr_t_data_t, *_fx_LN19C_form__ctyp_attr_t;

typedef struct _fx_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t {
   struct _fx_LN19C_form__ctyp_attr_t_data_t* t0;
   struct _fx_N14C_form__ctyp_t_data_t* t1;
} _fx_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t;

typedef struct _fx_T2iN14C_form__ctyp_t {
   int_ t0;
   struct _fx_N14C_form__ctyp_t_data_t* t1;
} _fx_T2iN14C_form__ctyp_t;

typedef struct _fx_N14C_form__ctyp_t_data_t {
   int_ rc;
   int tag;
   union {
      int_ CTypSInt;
      int_ CTypUInt;
      int_ CTypFloat;
      struct _fx_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t CTypStruct;
      struct _fx_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t CTypUnion;
      struct _fx_T2LN14C_form__ctyp_tN14C_form__ctyp_t CTypFunRawPtr;
      struct _fx_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t CTypRawPtr;
      struct _fx_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t CTypRawArray;
      struct _fx_T2iN14C_form__ctyp_t CTypArray;
      struct _fx_N14C_form__ctyp_t_data_t* CTypVector;
      struct _fx_R9Ast__id_t CTypName;
   } u;
} _fx_N14C_form__ctyp_t_data_t, *_fx_N14C_form__ctyp_t;

typedef struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t {
   struct _fx_N14C_form__ctyp_t_data_t* t0;
   struct _fx_R10Ast__loc_t t1;
} _fx_T2N14C_form__ctyp_tR10Ast__loc_t;

typedef struct _fx_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t t1;
} _fx_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t;

typedef struct _fx_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t {
   struct _fx_N14K_form__klit_t t0;
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t t1;
} _fx_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t;

typedef struct _fx_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t {
   struct _fx_N17C_form__cbinary_t t0;
   struct _fx_N14C_form__cexp_t_data_t* t1;
   struct _fx_N14C_form__cexp_t_data_t* t2;
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t t3;
} _fx_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t;

typedef struct _fx_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t {
   struct _fx_N16C_form__cunary_t t0;
   struct _fx_N14C_form__cexp_t_data_t* t1;
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t t2;
} _fx_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t;

typedef struct _fx_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t {
   struct _fx_N14C_form__cexp_t_data_t* t0;
   struct _fx_R9Ast__id_t t1;
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t t2;
} _fx_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t;

typedef struct _fx_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t {
   struct _fx_N14C_form__cexp_t_data_t* t0;
   struct _fx_N14C_form__ctyp_t_data_t* t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t;

typedef struct _fx_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t {
   struct _fx_N14C_form__cexp_t_data_t* t0;
   struct _fx_N14C_form__cexp_t_data_t* t1;
   struct _fx_N14C_form__cexp_t_data_t* t2;
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t t3;
} _fx_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t;

typedef struct _fx_LN14C_form__cexp_t_data_t {
   int_ rc;
   struct _fx_LN14C_form__cexp_t_data_t* tl;
   struct _fx_N14C_form__cexp_t_data_t* hd;
} _fx_LN14C_form__cexp_t_data_t, *_fx_LN14C_form__cexp_t;

typedef struct _fx_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t {
   struct _fx_N14C_form__cexp_t_data_t* t0;
   struct _fx_LN14C_form__cexp_t_data_t* t1;
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t t2;
} _fx_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t;

typedef struct _fx_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t {
   struct _fx_LN14C_form__cexp_t_data_t* t0;
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t t1;
} _fx_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t;

typedef struct _fx_N14C_form__cexp_t_data_t {
   int_ rc;
   int tag;
   union {
      struct _fx_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t CExpIdent;
      struct _fx_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t CExpLit;
      struct _fx_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t CExpBinary;
      struct _fx_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t CExpUnary;
      struct _fx_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t CExpMem;
      struct _fx_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t CExpArrow;
      struct _fx_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t CExpCast;
      struct _fx_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t CExpTernary;
      struct _fx_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t CExpCall;
      struct _fx_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t CExpInit;
      struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t CExpTyp;
      struct _fx_T2SR10Ast__loc_t CExpCCode;
   } u;
} _fx_N14C_form__cexp_t_data_t, *_fx_N14C_form__cexp_t;

typedef struct _fx_T2Nt6option1N14C_form__cexp_tR10Ast__loc_t {
   struct _fx_Nt6option1N14C_form__cexp_t t0;
   struct _fx_R10Ast__loc_t t1;
} _fx_T2Nt6option1N14C_form__cexp_tR10Ast__loc_t;

typedef struct _fx_T2LN15C_form__cstmt_tR10Ast__loc_t {
   struct _fx_LN15C_form__cstmt_t_data_t* t0;
   struct _fx_R10Ast__loc_t t1;
} _fx_T2LN15C_form__cstmt_tR10Ast__loc_t;

typedef struct _fx_T2R9Ast__id_tN15C_form__cstmt_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_N15C_form__cstmt_t_data_t* t1;
} _fx_T2R9Ast__id_tN15C_form__cstmt_t;

typedef struct _fx_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t {
   struct _fx_N14C_form__cexp_t_data_t* t0;
   struct _fx_N15C_form__cstmt_t_data_t* t1;
   struct _fx_N15C_form__cstmt_t_data_t* t2;
   struct _fx_R10Ast__loc_t t3;
} _fx_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t;

typedef struct _fx_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t {
   struct _fx_Nt6option1N14C_form__ctyp_t t0;
   struct _fx_LN14C_form__cexp_t_data_t* t1;
   struct _fx_Nt6option1N14C_form__cexp_t t2;
   struct _fx_LN14C_form__cexp_t_data_t* t3;
   struct _fx_N15C_form__cstmt_t_data_t* t4;
   struct _fx_R10Ast__loc_t t5;
} _fx_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t;

typedef struct _fx_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t {
   struct _fx_N14C_form__cexp_t_data_t* t0;
   struct _fx_N15C_form__cstmt_t_data_t* t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t;

typedef struct _fx_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t {
   struct _fx_N15C_form__cstmt_t_data_t* t0;
   struct _fx_N14C_form__cexp_t_data_t* t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t;

typedef struct _fx_T2LN14C_form__cexp_tLN15C_form__cstmt_t {
   struct _fx_LN14C_form__cexp_t_data_t* t0;
   struct _fx_LN15C_form__cstmt_t_data_t* t1;
} _fx_T2LN14C_form__cexp_tLN15C_form__cstmt_t;

typedef struct _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t_data_t {
   int_ rc;
   struct _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t_data_t* tl;
   struct _fx_T2LN14C_form__cexp_tLN15C_form__cstmt_t hd;
} _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t_data_t, *_fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t;

typedef struct _fx_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t {
   struct _fx_N14C_form__cexp_t_data_t* t0;
   struct _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t_data_t* t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t;

typedef struct _fx_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t {
   struct _fx_N14C_form__ctyp_t_data_t* t0;
   struct _fx_R9Ast__id_t t1;
   struct _fx_Nt6option1N14C_form__cexp_t t2;
   struct _fx_R10Ast__loc_t t3;
} _fx_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t;

typedef struct _fx_T2N14C_form__cexp_tLN15C_form__cstmt_t {
   struct _fx_N14C_form__cexp_t_data_t* t0;
   struct _fx_LN15C_form__cstmt_t_data_t* t1;
} _fx_T2N14C_form__cexp_tLN15C_form__cstmt_t;

typedef struct _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t_data_t {
   int_ rc;
   struct _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t_data_t* tl;
   struct _fx_T2N14C_form__cexp_tLN15C_form__cstmt_t hd;
} _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t_data_t, *_fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t;

typedef struct _fx_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t {
   struct _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t_data_t* t0;
   struct _fx_LN15C_form__cstmt_t_data_t* t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t;

typedef struct _fx_N15C_form__cstmt_t_data_t {
   int_ rc;
   int tag;
   union {
      struct _fx_R10Ast__loc_t CStmtNop;
      struct _fx_T2SR10Ast__loc_t CComment;
      struct _fx_N14C_form__cexp_t_data_t* CExp;
      struct _fx_R10Ast__loc_t CStmtBreak;
      struct _fx_R10Ast__loc_t CStmtContinue;
      struct _fx_T2Nt6option1N14C_form__cexp_tR10Ast__loc_t CStmtReturn;
      struct _fx_T2LN15C_form__cstmt_tR10Ast__loc_t CStmtBlock;
      struct _fx_T2R9Ast__id_tN15C_form__cstmt_t CStmtSync;
      struct _fx_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t CStmtIf;
      struct _fx_T2R9Ast__id_tR10Ast__loc_t CStmtGoto;
      struct _fx_T2R9Ast__id_tR10Ast__loc_t CStmtLabel;
      struct _fx_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t
         CStmtFor;
      struct _fx_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t CStmtWhile;
      struct _fx_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t CStmtDoWhile;
      struct _fx_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t CStmtSwitch;
      struct _fx_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t CDefVal;
      struct _fx_rR17C_form__cdeffun_t_data_t* CDefFun;
      struct _fx_rR17C_form__cdeftyp_t_data_t* CDefTyp;
      struct _fx_T2R9Ast__id_tR10Ast__loc_t CDefForwardSym;
      struct _fx_T2R9Ast__id_tR10Ast__loc_t CDefForwardTyp;
      struct _fx_rR18C_form__cdefenum_t_data_t* CDefEnum;
      struct _fx_rR23C_form__cdefinterface_t_data_t* CDefInterface;
      struct _fx_rR19C_form__cdefmacro_t_data_t* CMacroDef;
      struct _fx_T2R9Ast__id_tR10Ast__loc_t CMacroUndef;
      struct _fx_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t CMacroIf;
      struct _fx_T2SR10Ast__loc_t CMacroInclude;
      struct _fx_T2SR10Ast__loc_t CMacroPragma;
   } u;
} _fx_N15C_form__cstmt_t_data_t, *_fx_N15C_form__cstmt_t;

typedef struct _fx_FPLN15C_form__cstmt_t2LN15C_form__cstmt_tR17C_form__c_callb_t {
   int (*fp)(
      struct _fx_LN15C_form__cstmt_t_data_t*, struct _fx_R17C_form__c_callb_t*, struct _fx_LN15C_form__cstmt_t_data_t**, void*);
   fx_fcv_t* fcv;
} _fx_FPLN15C_form__cstmt_t2LN15C_form__cstmt_tR17C_form__c_callb_t;

typedef struct _fx_FPv2LN15C_form__cstmt_tR22C_form__c_fold_callb_t {
   int (*fp)(struct _fx_LN15C_form__cstmt_t_data_t*, struct _fx_R22C_form__c_fold_callb_t*, void*);
   fx_fcv_t* fcv;
} _fx_FPv2LN15C_form__cstmt_tR22C_form__c_fold_callb_t;

typedef struct _fx_T2SR9Ast__id_t {
   fx_str_t t0;
   struct _fx_R9Ast__id_t t1;
} _fx_T2SR9Ast__id_t;

typedef struct {
   int_ rc;
   int_ data;
} _fx_E4Exit_data_t;

typedef struct {
   int_ rc;
   fx_str_t data;
} _fx_E4Fail_data_t;

typedef struct {
   int_ rc;
   struct _fx_T2Ta2iS data;
} _fx_E22LexerUtils__LexerError_data_t;

typedef struct {
   int_ rc;
   struct _fx_T2R10Ast__loc_tS data;
} _fx_E17Ast__CompileError_data_t;

typedef struct {
   int_ rc;
   struct _fx_T2R10Ast__loc_tS data;
} _fx_E18Parser__ParseError_data_t;

static void _fx_free_Nt6option1N10Ast__typ_t(struct _fx_Nt6option1N10Ast__typ_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      _fx_free_N10Ast__typ_t(&(*dst)->u.Some); fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_LS(struct _fx_LS_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LS, fx_free_str);
}

static int _fx_cons_LS(fx_str_t* hd, struct _fx_LS_data_t* tl, bool addref_tl, struct _fx_LS_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LS, fx_copy_str);
}

static void _fx_free_T2Ta2iS(struct _fx_T2Ta2iS* dst)
{
   fx_free_str(&dst->t1);
}

static void _fx_copy_T2Ta2iS(struct _fx_T2Ta2iS* src, struct _fx_T2Ta2iS* dst)
{
   dst->t0 = src->t0;
   fx_copy_str(&src->t1, &dst->t1);
}

static void _fx_make_T2Ta2iS(struct _fx_Ta2i* t0, fx_str_t* t1, struct _fx_T2Ta2iS* fx_result)
{
   fx_result->t0 = *t0;
   fx_copy_str(t1, &fx_result->t1);
}

static int _fx_cons_LN12Ast__scope_t(
   struct _fx_N12Ast__scope_t* hd,
   struct _fx_LN12Ast__scope_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN12Ast__scope_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN12Ast__scope_t, FX_COPY_SIMPLE_BY_PTR);
}

static void _fx_free_R16Ast__val_flags_t(struct _fx_R16Ast__val_flags_t* dst)
{
   fx_free_list_simple(&dst->val_flag_global);
}

static void _fx_copy_R16Ast__val_flags_t(struct _fx_R16Ast__val_flags_t* src, struct _fx_R16Ast__val_flags_t* dst)
{
   dst->val_flag_arg = src->val_flag_arg;
   dst->val_flag_mutable = src->val_flag_mutable;
   dst->val_flag_temp = src->val_flag_temp;
   dst->val_flag_tempref = src->val_flag_tempref;
   dst->val_flag_private = src->val_flag_private;
   dst->val_flag_subarray = src->val_flag_subarray;
   dst->val_flag_instance = src->val_flag_instance;
   dst->val_flag_method = src->val_flag_method;
   dst->val_flag_ctor = src->val_flag_ctor;
   FX_COPY_PTR(src->val_flag_global, &dst->val_flag_global);
}

static void _fx_make_R16Ast__val_flags_t(
   bool r_val_flag_arg,
   bool r_val_flag_mutable,
   bool r_val_flag_temp,
   bool r_val_flag_tempref,
   bool r_val_flag_private,
   bool r_val_flag_subarray,
   bool r_val_flag_instance,
   struct _fx_T2R9Ast__id_ti* r_val_flag_method,
   int_ r_val_flag_ctor,
   struct _fx_LN12Ast__scope_t_data_t* r_val_flag_global,
   struct _fx_R16Ast__val_flags_t* fx_result)
{
   fx_result->val_flag_arg = r_val_flag_arg;
   fx_result->val_flag_mutable = r_val_flag_mutable;
   fx_result->val_flag_temp = r_val_flag_temp;
   fx_result->val_flag_tempref = r_val_flag_tempref;
   fx_result->val_flag_private = r_val_flag_private;
   fx_result->val_flag_subarray = r_val_flag_subarray;
   fx_result->val_flag_instance = r_val_flag_instance;
   fx_result->val_flag_method = *r_val_flag_method;
   fx_result->val_flag_ctor = r_val_flag_ctor;
   FX_COPY_PTR(r_val_flag_global, &fx_result->val_flag_global);
}

static void _fx_free_R17C_form__cdefval_t(struct _fx_R17C_form__cdefval_t* dst)
{
   _fx_free_N14C_form__ctyp_t(&dst->cv_typ);
   fx_free_str(&dst->cv_cname);
   _fx_free_R16Ast__val_flags_t(&dst->cv_flags);
}

static void _fx_copy_R17C_form__cdefval_t(struct _fx_R17C_form__cdefval_t* src, struct _fx_R17C_form__cdefval_t* dst)
{
   dst->cv_name = src->cv_name;
   FX_COPY_PTR(src->cv_typ, &dst->cv_typ);
   fx_copy_str(&src->cv_cname, &dst->cv_cname);
   _fx_copy_R16Ast__val_flags_t(&src->cv_flags, &dst->cv_flags);
   dst->cv_loc = src->cv_loc;
}

static void _fx_make_R17C_form__cdefval_t(
   struct _fx_R9Ast__id_t* r_cv_name,
   struct _fx_N14C_form__ctyp_t_data_t* r_cv_typ,
   fx_str_t* r_cv_cname,
   struct _fx_R16Ast__val_flags_t* r_cv_flags,
   struct _fx_R10Ast__loc_t* r_cv_loc,
   struct _fx_R17C_form__cdefval_t* fx_result)
{
   fx_result->cv_name = *r_cv_name;
   FX_COPY_PTR(r_cv_typ, &fx_result->cv_typ);
   fx_copy_str(r_cv_cname, &fx_result->cv_cname);
   _fx_copy_R16Ast__val_flags_t(r_cv_flags, &fx_result->cv_flags);
   fx_result->cv_loc = *r_cv_loc;
}

static void _fx_free_R19C_form__cdeflabel_t(struct _fx_R19C_form__cdeflabel_t* dst)
{
   fx_free_str(&dst->cl_cname);
}

static void _fx_copy_R19C_form__cdeflabel_t(struct _fx_R19C_form__cdeflabel_t* src, struct _fx_R19C_form__cdeflabel_t* dst)
{
   dst->cl_name = src->cl_name;
   fx_copy_str(&src->cl_cname, &dst->cl_cname);
   dst->cl_loc = src->cl_loc;
}

static void _fx_make_R19C_form__cdeflabel_t(
   struct _fx_R9Ast__id_t* r_cl_name,
   fx_str_t* r_cl_cname,
   struct _fx_R10Ast__loc_t* r_cl_loc,
   struct _fx_R19C_form__cdeflabel_t* fx_result)
{
   fx_result->cl_name = *r_cl_name;
   fx_copy_str(r_cl_cname, &fx_result->cl_cname);
   fx_result->cl_loc = *r_cl_loc;
}

static void _fx_free_T2R9Ast__id_tN14C_form__ctyp_t(struct _fx_T2R9Ast__id_tN14C_form__ctyp_t* dst)
{
   _fx_free_N14C_form__ctyp_t(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tN14C_form__ctyp_t(
   struct _fx_T2R9Ast__id_tN14C_form__ctyp_t* src,
   struct _fx_T2R9Ast__id_tN14C_form__ctyp_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tN14C_form__ctyp_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_N14C_form__ctyp_t_data_t* t1,
   struct _fx_T2R9Ast__id_tN14C_form__ctyp_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_LT2R9Ast__id_tN14C_form__ctyp_t(struct _fx_LT2R9Ast__id_tN14C_form__ctyp_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2R9Ast__id_tN14C_form__ctyp_t, _fx_free_T2R9Ast__id_tN14C_form__ctyp_t);
}

static int _fx_cons_LT2R9Ast__id_tN14C_form__ctyp_t(
   struct _fx_T2R9Ast__id_tN14C_form__ctyp_t* hd,
   struct _fx_LT2R9Ast__id_tN14C_form__ctyp_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2R9Ast__id_tN14C_form__ctyp_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2R9Ast__id_tN14C_form__ctyp_t, _fx_copy_T2R9Ast__id_tN14C_form__ctyp_t);
}

static void _fx_free_R23C_form__cdefinterface_t(struct _fx_R23C_form__cdefinterface_t* dst)
{
   fx_free_str(&dst->ci_cname);
   _fx_free_LT2R9Ast__id_tN14C_form__ctyp_t(&dst->ci_all_methods);
   fx_free_list_simple(&dst->ci_scope);
}

static void _fx_copy_R23C_form__cdefinterface_t(
   struct _fx_R23C_form__cdefinterface_t* src,
   struct _fx_R23C_form__cdefinterface_t* dst)
{
   dst->ci_name = src->ci_name;
   fx_copy_str(&src->ci_cname, &dst->ci_cname);
   dst->ci_id = src->ci_id;
   dst->ci_vtbl = src->ci_vtbl;
   dst->ci_base = src->ci_base;
   FX_COPY_PTR(src->ci_all_methods, &dst->ci_all_methods);
   FX_COPY_PTR(src->ci_scope, &dst->ci_scope);
   dst->ci_loc = src->ci_loc;
}

static void _fx_make_R23C_form__cdefinterface_t(
   struct _fx_R9Ast__id_t* r_ci_name,
   fx_str_t* r_ci_cname,
   struct _fx_R9Ast__id_t* r_ci_id,
   struct _fx_R9Ast__id_t* r_ci_vtbl,
   struct _fx_R9Ast__id_t* r_ci_base,
   struct _fx_LT2R9Ast__id_tN14C_form__ctyp_t_data_t* r_ci_all_methods,
   struct _fx_LN12Ast__scope_t_data_t* r_ci_scope,
   struct _fx_R10Ast__loc_t* r_ci_loc,
   struct _fx_R23C_form__cdefinterface_t* fx_result)
{
   fx_result->ci_name = *r_ci_name;
   fx_copy_str(r_ci_cname, &fx_result->ci_cname);
   fx_result->ci_id = *r_ci_id;
   fx_result->ci_vtbl = *r_ci_vtbl;
   fx_result->ci_base = *r_ci_base;
   FX_COPY_PTR(r_ci_all_methods, &fx_result->ci_all_methods);
   FX_COPY_PTR(r_ci_scope, &fx_result->ci_scope);
   fx_result->ci_loc = *r_ci_loc;
}

static void _fx_free_rR23C_form__cdefinterface_t(struct _fx_rR23C_form__cdefinterface_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR23C_form__cdefinterface_t, _fx_free_R23C_form__cdefinterface_t);
}

static int _fx_make_rR23C_form__cdefinterface_t(
   struct _fx_R23C_form__cdefinterface_t* arg,
   struct _fx_rR23C_form__cdefinterface_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR23C_form__cdefinterface_t, _fx_copy_R23C_form__cdefinterface_t);
}

static void _fx_free_LN15C_form__cstmt_t(struct _fx_LN15C_form__cstmt_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LN15C_form__cstmt_t, _fx_free_N15C_form__cstmt_t);
}

static int _fx_cons_LN15C_form__cstmt_t(
   struct _fx_N15C_form__cstmt_t_data_t* hd,
   struct _fx_LN15C_form__cstmt_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN15C_form__cstmt_t, FX_COPY_PTR);
}

static int _fx_cons_LN19C_form__carg_attr_t(
   struct _fx_N19C_form__carg_attr_t* hd,
   struct _fx_LN19C_form__carg_attr_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN19C_form__carg_attr_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN19C_form__carg_attr_t, FX_COPY_SIMPLE_BY_PTR);
}

static void _fx_free_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t(
   struct _fx_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t* dst)
{
   _fx_free_N14C_form__ctyp_t(&dst->t1);
   fx_free_list_simple(&dst->t2);
}

static void _fx_copy_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t(
   struct _fx_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t* src,
   struct _fx_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
   FX_COPY_PTR(src->t2, &dst->t2);
}

static void _fx_make_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_N14C_form__ctyp_t_data_t* t1,
   struct _fx_LN19C_form__carg_attr_t_data_t* t2,
   struct _fx_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
   FX_COPY_PTR(t2, &fx_result->t2);
}

static void _fx_free_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t(
   struct _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t,
      _fx_free_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t);
}

static int _fx_cons_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t(
   struct _fx_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t* hd,
   struct _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t,
      _fx_copy_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t);
}

static void _fx_free_R17C_form__cdeffun_t(struct _fx_R17C_form__cdeffun_t* dst)
{
   fx_free_str(&dst->cf_cname);
   _fx_free_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t(&dst->cf_args);
   _fx_free_N14C_form__ctyp_t(&dst->cf_rt);
   _fx_free_LN15C_form__cstmt_t(&dst->cf_body);
   fx_free_list_simple(&dst->cf_scope);
}

static void _fx_copy_R17C_form__cdeffun_t(struct _fx_R17C_form__cdeffun_t* src, struct _fx_R17C_form__cdeffun_t* dst)
{
   dst->cf_name = src->cf_name;
   fx_copy_str(&src->cf_cname, &dst->cf_cname);
   FX_COPY_PTR(src->cf_args, &dst->cf_args);
   FX_COPY_PTR(src->cf_rt, &dst->cf_rt);
   FX_COPY_PTR(src->cf_body, &dst->cf_body);
   dst->cf_flags = src->cf_flags;
   FX_COPY_PTR(src->cf_scope, &dst->cf_scope);
   dst->cf_loc = src->cf_loc;
}

static void _fx_make_R17C_form__cdeffun_t(
   struct _fx_R9Ast__id_t* r_cf_name,
   fx_str_t* r_cf_cname,
   struct _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t_data_t* r_cf_args,
   struct _fx_N14C_form__ctyp_t_data_t* r_cf_rt,
   struct _fx_LN15C_form__cstmt_t_data_t* r_cf_body,
   struct _fx_R16Ast__fun_flags_t* r_cf_flags,
   struct _fx_LN12Ast__scope_t_data_t* r_cf_scope,
   struct _fx_R10Ast__loc_t* r_cf_loc,
   struct _fx_R17C_form__cdeffun_t* fx_result)
{
   fx_result->cf_name = *r_cf_name;
   fx_copy_str(r_cf_cname, &fx_result->cf_cname);
   FX_COPY_PTR(r_cf_args, &fx_result->cf_args);
   FX_COPY_PTR(r_cf_rt, &fx_result->cf_rt);
   FX_COPY_PTR(r_cf_body, &fx_result->cf_body);
   fx_result->cf_flags = *r_cf_flags;
   FX_COPY_PTR(r_cf_scope, &fx_result->cf_scope);
   fx_result->cf_loc = *r_cf_loc;
}

static void _fx_free_rR17C_form__cdeffun_t(struct _fx_rR17C_form__cdeffun_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR17C_form__cdeffun_t, _fx_free_R17C_form__cdeffun_t);
}

static int _fx_make_rR17C_form__cdeffun_t(
   struct _fx_R17C_form__cdeffun_t* arg,
   struct _fx_rR17C_form__cdeffun_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR17C_form__cdeffun_t, _fx_copy_R17C_form__cdeffun_t);
}

static int _fx_cons_LR9Ast__id_t(
   struct _fx_R9Ast__id_t* hd,
   struct _fx_LR9Ast__id_t_data_t* tl,
   bool addref_tl,
   struct _fx_LR9Ast__id_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LR9Ast__id_t, FX_COPY_SIMPLE_BY_PTR);
}

static void _fx_free_R17C_form__ctprops_t(struct _fx_R17C_form__ctprops_t* dst)
{
   fx_free_list_simple(&dst->ctp_make);
}

static void _fx_copy_R17C_form__ctprops_t(struct _fx_R17C_form__ctprops_t* src, struct _fx_R17C_form__ctprops_t* dst)
{
   dst->ctp_scalar = src->ctp_scalar;
   dst->ctp_complex = src->ctp_complex;
   dst->ctp_ptr = src->ctp_ptr;
   dst->ctp_pass_by_ref = src->ctp_pass_by_ref;
   FX_COPY_PTR(src->ctp_make, &dst->ctp_make);
   dst->ctp_free = src->ctp_free;
   dst->ctp_copy = src->ctp_copy;
}

static void _fx_make_R17C_form__ctprops_t(
   bool r_ctp_scalar,
   bool r_ctp_complex,
   bool r_ctp_ptr,
   bool r_ctp_pass_by_ref,
   struct _fx_LR9Ast__id_t_data_t* r_ctp_make,
   struct _fx_Ta2R9Ast__id_t* r_ctp_free,
   struct _fx_Ta2R9Ast__id_t* r_ctp_copy,
   struct _fx_R17C_form__ctprops_t* fx_result)
{
   fx_result->ctp_scalar = r_ctp_scalar;
   fx_result->ctp_complex = r_ctp_complex;
   fx_result->ctp_ptr = r_ctp_ptr;
   fx_result->ctp_pass_by_ref = r_ctp_pass_by_ref;
   FX_COPY_PTR(r_ctp_make, &fx_result->ctp_make);
   fx_result->ctp_free = *r_ctp_free;
   fx_result->ctp_copy = *r_ctp_copy;
}

static void _fx_free_R17C_form__cdeftyp_t(struct _fx_R17C_form__cdeftyp_t* dst)
{
   _fx_free_N14C_form__ctyp_t(&dst->ct_typ);
   fx_free_str(&dst->ct_cname);
   _fx_free_R17C_form__ctprops_t(&dst->ct_props);
   fx_free_list_simple(&dst->ct_ifaces);
   fx_free_list_simple(&dst->ct_scope);
}

static void _fx_copy_R17C_form__cdeftyp_t(struct _fx_R17C_form__cdeftyp_t* src, struct _fx_R17C_form__cdeftyp_t* dst)
{
   dst->ct_name = src->ct_name;
   FX_COPY_PTR(src->ct_typ, &dst->ct_typ);
   fx_copy_str(&src->ct_cname, &dst->ct_cname);
   _fx_copy_R17C_form__ctprops_t(&src->ct_props, &dst->ct_props);
   dst->ct_data_start = src->ct_data_start;
   dst->ct_enum = src->ct_enum;
   FX_COPY_PTR(src->ct_ifaces, &dst->ct_ifaces);
   dst->ct_ifaces_id = src->ct_ifaces_id;
   FX_COPY_PTR(src->ct_scope, &dst->ct_scope);
   dst->ct_loc = src->ct_loc;
}

static void _fx_make_R17C_form__cdeftyp_t(
   struct _fx_R9Ast__id_t* r_ct_name,
   struct _fx_N14C_form__ctyp_t_data_t* r_ct_typ,
   fx_str_t* r_ct_cname,
   struct _fx_R17C_form__ctprops_t* r_ct_props,
   int_ r_ct_data_start,
   struct _fx_R9Ast__id_t* r_ct_enum,
   struct _fx_LR9Ast__id_t_data_t* r_ct_ifaces,
   struct _fx_R9Ast__id_t* r_ct_ifaces_id,
   struct _fx_LN12Ast__scope_t_data_t* r_ct_scope,
   struct _fx_R10Ast__loc_t* r_ct_loc,
   struct _fx_R17C_form__cdeftyp_t* fx_result)
{
   fx_result->ct_name = *r_ct_name;
   FX_COPY_PTR(r_ct_typ, &fx_result->ct_typ);
   fx_copy_str(r_ct_cname, &fx_result->ct_cname);
   _fx_copy_R17C_form__ctprops_t(r_ct_props, &fx_result->ct_props);
   fx_result->ct_data_start = r_ct_data_start;
   fx_result->ct_enum = *r_ct_enum;
   FX_COPY_PTR(r_ct_ifaces, &fx_result->ct_ifaces);
   fx_result->ct_ifaces_id = *r_ct_ifaces_id;
   FX_COPY_PTR(r_ct_scope, &fx_result->ct_scope);
   fx_result->ct_loc = *r_ct_loc;
}

static void _fx_free_rR17C_form__cdeftyp_t(struct _fx_rR17C_form__cdeftyp_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR17C_form__cdeftyp_t, _fx_free_R17C_form__cdeftyp_t);
}

static int _fx_make_rR17C_form__cdeftyp_t(
   struct _fx_R17C_form__cdeftyp_t* arg,
   struct _fx_rR17C_form__cdeftyp_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR17C_form__cdeftyp_t, _fx_copy_R17C_form__cdeftyp_t);
}

static void _fx_free_Nt6option1N14C_form__cexp_t(struct _fx_Nt6option1N14C_form__cexp_t* dst)
{
   switch (dst->tag) {
   case 2:
      _fx_free_N14C_form__cexp_t(&dst->u.Some); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_Nt6option1N14C_form__cexp_t(
   struct _fx_Nt6option1N14C_form__cexp_t* src,
   struct _fx_Nt6option1N14C_form__cexp_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 2:
      FX_COPY_PTR(src->u.Some, &dst->u.Some); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_T2R9Ast__id_tNt6option1N14C_form__cexp_t(struct _fx_T2R9Ast__id_tNt6option1N14C_form__cexp_t* dst)
{
   _fx_free_Nt6option1N14C_form__cexp_t(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tNt6option1N14C_form__cexp_t(
   struct _fx_T2R9Ast__id_tNt6option1N14C_form__cexp_t* src,
   struct _fx_T2R9Ast__id_tNt6option1N14C_form__cexp_t* dst)
{
   dst->t0 = src->t0;
   _fx_copy_Nt6option1N14C_form__cexp_t(&src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tNt6option1N14C_form__cexp_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_Nt6option1N14C_form__cexp_t* t1,
   struct _fx_T2R9Ast__id_tNt6option1N14C_form__cexp_t* fx_result)
{
   fx_result->t0 = *t0;
   _fx_copy_Nt6option1N14C_form__cexp_t(t1, &fx_result->t1);
}

static void _fx_free_LT2R9Ast__id_tNt6option1N14C_form__cexp_t(
   struct _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t, _fx_free_T2R9Ast__id_tNt6option1N14C_form__cexp_t);
}

static int _fx_cons_LT2R9Ast__id_tNt6option1N14C_form__cexp_t(
   struct _fx_T2R9Ast__id_tNt6option1N14C_form__cexp_t* hd,
   struct _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t, _fx_copy_T2R9Ast__id_tNt6option1N14C_form__cexp_t);
}

static void _fx_free_R18C_form__cdefenum_t(struct _fx_R18C_form__cdefenum_t* dst)
{
   _fx_free_LT2R9Ast__id_tNt6option1N14C_form__cexp_t(&dst->cenum_members);
   fx_free_str(&dst->cenum_cname);
   fx_free_list_simple(&dst->cenum_scope);
}

static void _fx_copy_R18C_form__cdefenum_t(struct _fx_R18C_form__cdefenum_t* src, struct _fx_R18C_form__cdefenum_t* dst)
{
   dst->cenum_name = src->cenum_name;
   FX_COPY_PTR(src->cenum_members, &dst->cenum_members);
   fx_copy_str(&src->cenum_cname, &dst->cenum_cname);
   FX_COPY_PTR(src->cenum_scope, &dst->cenum_scope);
   dst->cenum_loc = src->cenum_loc;
}

static void _fx_make_R18C_form__cdefenum_t(
   struct _fx_R9Ast__id_t* r_cenum_name,
   struct _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t_data_t* r_cenum_members,
   fx_str_t* r_cenum_cname,
   struct _fx_LN12Ast__scope_t_data_t* r_cenum_scope,
   struct _fx_R10Ast__loc_t* r_cenum_loc,
   struct _fx_R18C_form__cdefenum_t* fx_result)
{
   fx_result->cenum_name = *r_cenum_name;
   FX_COPY_PTR(r_cenum_members, &fx_result->cenum_members);
   fx_copy_str(r_cenum_cname, &fx_result->cenum_cname);
   FX_COPY_PTR(r_cenum_scope, &fx_result->cenum_scope);
   fx_result->cenum_loc = *r_cenum_loc;
}

static void _fx_free_rR18C_form__cdefenum_t(struct _fx_rR18C_form__cdefenum_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR18C_form__cdefenum_t, _fx_free_R18C_form__cdefenum_t);
}

static int _fx_make_rR18C_form__cdefenum_t(
   struct _fx_R18C_form__cdefenum_t* arg,
   struct _fx_rR18C_form__cdefenum_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR18C_form__cdefenum_t, _fx_copy_R18C_form__cdefenum_t);
}

static void _fx_free_R19C_form__cdefmacro_t(struct _fx_R19C_form__cdefmacro_t* dst)
{
   fx_free_str(&dst->cm_cname);
   fx_free_list_simple(&dst->cm_args);
   _fx_free_LN15C_form__cstmt_t(&dst->cm_body);
   fx_free_list_simple(&dst->cm_scope);
}

static void _fx_copy_R19C_form__cdefmacro_t(struct _fx_R19C_form__cdefmacro_t* src, struct _fx_R19C_form__cdefmacro_t* dst)
{
   dst->cm_name = src->cm_name;
   fx_copy_str(&src->cm_cname, &dst->cm_cname);
   FX_COPY_PTR(src->cm_args, &dst->cm_args);
   FX_COPY_PTR(src->cm_body, &dst->cm_body);
   FX_COPY_PTR(src->cm_scope, &dst->cm_scope);
   dst->cm_loc = src->cm_loc;
}

static void _fx_make_R19C_form__cdefmacro_t(
   struct _fx_R9Ast__id_t* r_cm_name,
   fx_str_t* r_cm_cname,
   struct _fx_LR9Ast__id_t_data_t* r_cm_args,
   struct _fx_LN15C_form__cstmt_t_data_t* r_cm_body,
   struct _fx_LN12Ast__scope_t_data_t* r_cm_scope,
   struct _fx_R10Ast__loc_t* r_cm_loc,
   struct _fx_R19C_form__cdefmacro_t* fx_result)
{
   fx_result->cm_name = *r_cm_name;
   fx_copy_str(r_cm_cname, &fx_result->cm_cname);
   FX_COPY_PTR(r_cm_args, &fx_result->cm_args);
   FX_COPY_PTR(r_cm_body, &fx_result->cm_body);
   FX_COPY_PTR(r_cm_scope, &fx_result->cm_scope);
   fx_result->cm_loc = *r_cm_loc;
}

static void _fx_free_rR19C_form__cdefmacro_t(struct _fx_rR19C_form__cdefmacro_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR19C_form__cdefmacro_t, _fx_free_R19C_form__cdefmacro_t);
}

static int _fx_make_rR19C_form__cdefmacro_t(
   struct _fx_R19C_form__cdefmacro_t* arg,
   struct _fx_rR19C_form__cdefmacro_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR19C_form__cdefmacro_t, _fx_copy_R19C_form__cdefmacro_t);
}

static void _fx_free_R17C_form__cdefexn_t(struct _fx_R17C_form__cdefexn_t* dst)
{
   fx_free_str(&dst->cexn_cname);
   fx_free_str(&dst->cexn_base_cname);
   _fx_free_N14C_form__ctyp_t(&dst->cexn_typ);
   fx_free_list_simple(&dst->cexn_scope);
}

static void _fx_copy_R17C_form__cdefexn_t(struct _fx_R17C_form__cdefexn_t* src, struct _fx_R17C_form__cdefexn_t* dst)
{
   dst->cexn_name = src->cexn_name;
   fx_copy_str(&src->cexn_cname, &dst->cexn_cname);
   fx_copy_str(&src->cexn_base_cname, &dst->cexn_base_cname);
   FX_COPY_PTR(src->cexn_typ, &dst->cexn_typ);
   dst->cexn_std = src->cexn_std;
   dst->cexn_tag = src->cexn_tag;
   dst->cexn_data = src->cexn_data;
   dst->cexn_info = src->cexn_info;
   dst->cexn_make = src->cexn_make;
   FX_COPY_PTR(src->cexn_scope, &dst->cexn_scope);
   dst->cexn_loc = src->cexn_loc;
}

static void _fx_make_R17C_form__cdefexn_t(
   struct _fx_R9Ast__id_t* r_cexn_name,
   fx_str_t* r_cexn_cname,
   fx_str_t* r_cexn_base_cname,
   struct _fx_N14C_form__ctyp_t_data_t* r_cexn_typ,
   bool r_cexn_std,
   struct _fx_R9Ast__id_t* r_cexn_tag,
   struct _fx_R9Ast__id_t* r_cexn_data,
   struct _fx_R9Ast__id_t* r_cexn_info,
   struct _fx_R9Ast__id_t* r_cexn_make,
   struct _fx_LN12Ast__scope_t_data_t* r_cexn_scope,
   struct _fx_R10Ast__loc_t* r_cexn_loc,
   struct _fx_R17C_form__cdefexn_t* fx_result)
{
   fx_result->cexn_name = *r_cexn_name;
   fx_copy_str(r_cexn_cname, &fx_result->cexn_cname);
   fx_copy_str(r_cexn_base_cname, &fx_result->cexn_base_cname);
   FX_COPY_PTR(r_cexn_typ, &fx_result->cexn_typ);
   fx_result->cexn_std = r_cexn_std;
   fx_result->cexn_tag = *r_cexn_tag;
   fx_result->cexn_data = *r_cexn_data;
   fx_result->cexn_info = *r_cexn_info;
   fx_result->cexn_make = *r_cexn_make;
   FX_COPY_PTR(r_cexn_scope, &fx_result->cexn_scope);
   fx_result->cexn_loc = *r_cexn_loc;
}

static void _fx_free_rR17C_form__cdefexn_t(struct _fx_rR17C_form__cdefexn_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR17C_form__cdefexn_t, _fx_free_R17C_form__cdefexn_t);
}

static int _fx_make_rR17C_form__cdefexn_t(
   struct _fx_R17C_form__cdefexn_t* arg,
   struct _fx_rR17C_form__cdefexn_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR17C_form__cdefexn_t, _fx_copy_R17C_form__cdefexn_t);
}

static void _fx_free_N15C_form__cinfo_t(struct _fx_N15C_form__cinfo_t* dst)
{
   switch (dst->tag) {
   case 2:
      _fx_free_R17C_form__cdefval_t(&dst->u.CVal); break;
   case 3:
      _fx_free_rR17C_form__cdeffun_t(&dst->u.CFun); break;
   case 4:
      _fx_free_rR17C_form__cdeftyp_t(&dst->u.CTyp); break;
   case 5:
      _fx_free_rR17C_form__cdefexn_t(&dst->u.CExn); break;
   case 6:
      _fx_free_rR23C_form__cdefinterface_t(&dst->u.CInterface); break;
   case 7:
      _fx_free_rR18C_form__cdefenum_t(&dst->u.CEnum); break;
   case 8:
      _fx_free_R19C_form__cdeflabel_t(&dst->u.CLabel); break;
   case 9:
      _fx_free_rR19C_form__cdefmacro_t(&dst->u.CMacro); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_N15C_form__cinfo_t(struct _fx_N15C_form__cinfo_t* src, struct _fx_N15C_form__cinfo_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 2:
      _fx_copy_R17C_form__cdefval_t(&src->u.CVal, &dst->u.CVal); break;
   case 3:
      FX_COPY_PTR(src->u.CFun, &dst->u.CFun); break;
   case 4:
      FX_COPY_PTR(src->u.CTyp, &dst->u.CTyp); break;
   case 5:
      FX_COPY_PTR(src->u.CExn, &dst->u.CExn); break;
   case 6:
      FX_COPY_PTR(src->u.CInterface, &dst->u.CInterface); break;
   case 7:
      FX_COPY_PTR(src->u.CEnum, &dst->u.CEnum); break;
   case 8:
      _fx_copy_R19C_form__cdeflabel_t(&src->u.CLabel, &dst->u.CLabel); break;
   case 9:
      FX_COPY_PTR(src->u.CMacro, &dst->u.CMacro); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_T3iA1N15C_form__cinfo_tN15C_form__cinfo_t(struct _fx_T3iA1N15C_form__cinfo_tN15C_form__cinfo_t* dst)
{
   fx_free_arr(&dst->t1);
   _fx_free_N15C_form__cinfo_t(&dst->t2);
}

static void _fx_copy_T3iA1N15C_form__cinfo_tN15C_form__cinfo_t(
   struct _fx_T3iA1N15C_form__cinfo_tN15C_form__cinfo_t* src,
   struct _fx_T3iA1N15C_form__cinfo_tN15C_form__cinfo_t* dst)
{
   dst->t0 = src->t0;
   fx_copy_arr(&src->t1, &dst->t1);
   _fx_copy_N15C_form__cinfo_t(&src->t2, &dst->t2);
}

static void _fx_make_T3iA1N15C_form__cinfo_tN15C_form__cinfo_t(
   int_ t0,
   fx_arr_t* t1,
   struct _fx_N15C_form__cinfo_t* t2,
   struct _fx_T3iA1N15C_form__cinfo_tN15C_form__cinfo_t* fx_result)
{
   fx_result->t0 = t0;
   fx_copy_arr(t1, &fx_result->t1);
   _fx_copy_N15C_form__cinfo_t(t2, &fx_result->t2);
}

static void _fx_free_Nt9Dynvec__t1N15C_form__cinfo_t(struct _fx_Nt9Dynvec__t1N15C_form__cinfo_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      _fx_free_T3iA1N15C_form__cinfo_tN15C_form__cinfo_t(&(*dst)->u.t); fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_R17K_form__kdefval_t(struct _fx_R17K_form__kdefval_t* dst)
{
   fx_free_str(&dst->kv_cname);
   _fx_free_N14K_form__ktyp_t(&dst->kv_typ);
   _fx_free_R16Ast__val_flags_t(&dst->kv_flags);
}

static void _fx_copy_R17K_form__kdefval_t(struct _fx_R17K_form__kdefval_t* src, struct _fx_R17K_form__kdefval_t* dst)
{
   dst->kv_name = src->kv_name;
   fx_copy_str(&src->kv_cname, &dst->kv_cname);
   FX_COPY_PTR(src->kv_typ, &dst->kv_typ);
   _fx_copy_R16Ast__val_flags_t(&src->kv_flags, &dst->kv_flags);
   dst->kv_loc = src->kv_loc;
}

static void _fx_make_R17K_form__kdefval_t(
   struct _fx_R9Ast__id_t* r_kv_name,
   fx_str_t* r_kv_cname,
   struct _fx_N14K_form__ktyp_t_data_t* r_kv_typ,
   struct _fx_R16Ast__val_flags_t* r_kv_flags,
   struct _fx_R10Ast__loc_t* r_kv_loc,
   struct _fx_R17K_form__kdefval_t* fx_result)
{
   fx_result->kv_name = *r_kv_name;
   fx_copy_str(r_kv_cname, &fx_result->kv_cname);
   FX_COPY_PTR(r_kv_typ, &fx_result->kv_typ);
   _fx_copy_R16Ast__val_flags_t(r_kv_flags, &fx_result->kv_flags);
   fx_result->kv_loc = *r_kv_loc;
}

static void _fx_free_T2R9Ast__id_tN14K_form__ktyp_t(struct _fx_T2R9Ast__id_tN14K_form__ktyp_t* dst)
{
   _fx_free_N14K_form__ktyp_t(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tN14K_form__ktyp_t(
   struct _fx_T2R9Ast__id_tN14K_form__ktyp_t* src,
   struct _fx_T2R9Ast__id_tN14K_form__ktyp_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tN14K_form__ktyp_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_N14K_form__ktyp_t_data_t* t1,
   struct _fx_T2R9Ast__id_tN14K_form__ktyp_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_LT2R9Ast__id_tN14K_form__ktyp_t(struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2R9Ast__id_tN14K_form__ktyp_t, _fx_free_T2R9Ast__id_tN14K_form__ktyp_t);
}

static int _fx_cons_LT2R9Ast__id_tN14K_form__ktyp_t(
   struct _fx_T2R9Ast__id_tN14K_form__ktyp_t* hd,
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2R9Ast__id_tN14K_form__ktyp_t, _fx_copy_T2R9Ast__id_tN14K_form__ktyp_t);
}

static void _fx_free_R23K_form__kdefinterface_t(struct _fx_R23K_form__kdefinterface_t* dst)
{
   fx_free_str(&dst->ki_cname);
   _fx_free_LT2R9Ast__id_tN14K_form__ktyp_t(&dst->ki_all_methods);
   fx_free_list_simple(&dst->ki_scope);
}

static void _fx_copy_R23K_form__kdefinterface_t(
   struct _fx_R23K_form__kdefinterface_t* src,
   struct _fx_R23K_form__kdefinterface_t* dst)
{
   dst->ki_name = src->ki_name;
   dst->ki_base = src->ki_base;
   fx_copy_str(&src->ki_cname, &dst->ki_cname);
   dst->ki_id = src->ki_id;
   FX_COPY_PTR(src->ki_all_methods, &dst->ki_all_methods);
   FX_COPY_PTR(src->ki_scope, &dst->ki_scope);
   dst->ki_loc = src->ki_loc;
}

static void _fx_make_R23K_form__kdefinterface_t(
   struct _fx_R9Ast__id_t* r_ki_name,
   struct _fx_R9Ast__id_t* r_ki_base,
   fx_str_t* r_ki_cname,
   struct _fx_R9Ast__id_t* r_ki_id,
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* r_ki_all_methods,
   struct _fx_LN12Ast__scope_t_data_t* r_ki_scope,
   struct _fx_R10Ast__loc_t* r_ki_loc,
   struct _fx_R23K_form__kdefinterface_t* fx_result)
{
   fx_result->ki_name = *r_ki_name;
   fx_result->ki_base = *r_ki_base;
   fx_copy_str(r_ki_cname, &fx_result->ki_cname);
   fx_result->ki_id = *r_ki_id;
   FX_COPY_PTR(r_ki_all_methods, &fx_result->ki_all_methods);
   FX_COPY_PTR(r_ki_scope, &fx_result->ki_scope);
   fx_result->ki_loc = *r_ki_loc;
}

static void _fx_free_rR23K_form__kdefinterface_t(struct _fx_rR23K_form__kdefinterface_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR23K_form__kdefinterface_t, _fx_free_R23K_form__kdefinterface_t);
}

static int _fx_make_rR23K_form__kdefinterface_t(
   struct _fx_R23K_form__kdefinterface_t* arg,
   struct _fx_rR23K_form__kdefinterface_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR23K_form__kdefinterface_t, _fx_copy_R23K_form__kdefinterface_t);
}

static void _fx_free_R17K_form__kdeffun_t(struct _fx_R17K_form__kdeffun_t* dst)
{
   fx_free_str(&dst->kf_cname);
   fx_free_list_simple(&dst->kf_params);
   _fx_free_N14K_form__ktyp_t(&dst->kf_rt);
   _fx_free_N14K_form__kexp_t(&dst->kf_body);
   fx_free_list_simple(&dst->kf_scope);
}

static void _fx_copy_R17K_form__kdeffun_t(struct _fx_R17K_form__kdeffun_t* src, struct _fx_R17K_form__kdeffun_t* dst)
{
   dst->kf_name = src->kf_name;
   fx_copy_str(&src->kf_cname, &dst->kf_cname);
   FX_COPY_PTR(src->kf_params, &dst->kf_params);
   FX_COPY_PTR(src->kf_rt, &dst->kf_rt);
   FX_COPY_PTR(src->kf_body, &dst->kf_body);
   dst->kf_flags = src->kf_flags;
   dst->kf_closure = src->kf_closure;
   FX_COPY_PTR(src->kf_scope, &dst->kf_scope);
   dst->kf_loc = src->kf_loc;
}

static void _fx_make_R17K_form__kdeffun_t(
   struct _fx_R9Ast__id_t* r_kf_name,
   fx_str_t* r_kf_cname,
   struct _fx_LR9Ast__id_t_data_t* r_kf_params,
   struct _fx_N14K_form__ktyp_t_data_t* r_kf_rt,
   struct _fx_N14K_form__kexp_t_data_t* r_kf_body,
   struct _fx_R16Ast__fun_flags_t* r_kf_flags,
   struct _fx_R25K_form__kdefclosureinfo_t* r_kf_closure,
   struct _fx_LN12Ast__scope_t_data_t* r_kf_scope,
   struct _fx_R10Ast__loc_t* r_kf_loc,
   struct _fx_R17K_form__kdeffun_t* fx_result)
{
   fx_result->kf_name = *r_kf_name;
   fx_copy_str(r_kf_cname, &fx_result->kf_cname);
   FX_COPY_PTR(r_kf_params, &fx_result->kf_params);
   FX_COPY_PTR(r_kf_rt, &fx_result->kf_rt);
   FX_COPY_PTR(r_kf_body, &fx_result->kf_body);
   fx_result->kf_flags = *r_kf_flags;
   fx_result->kf_closure = *r_kf_closure;
   FX_COPY_PTR(r_kf_scope, &fx_result->kf_scope);
   fx_result->kf_loc = *r_kf_loc;
}

static void _fx_free_rR17K_form__kdeffun_t(struct _fx_rR17K_form__kdeffun_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR17K_form__kdeffun_t, _fx_free_R17K_form__kdeffun_t);
}

static int _fx_make_rR17K_form__kdeffun_t(
   struct _fx_R17K_form__kdeffun_t* arg,
   struct _fx_rR17K_form__kdeffun_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR17K_form__kdeffun_t, _fx_copy_R17K_form__kdeffun_t);
}

static void _fx_free_R17K_form__kdefexn_t(struct _fx_R17K_form__kdefexn_t* dst)
{
   fx_free_str(&dst->ke_cname);
   fx_free_str(&dst->ke_base_cname);
   _fx_free_N14K_form__ktyp_t(&dst->ke_typ);
   fx_free_list_simple(&dst->ke_scope);
}

static void _fx_copy_R17K_form__kdefexn_t(struct _fx_R17K_form__kdefexn_t* src, struct _fx_R17K_form__kdefexn_t* dst)
{
   dst->ke_name = src->ke_name;
   fx_copy_str(&src->ke_cname, &dst->ke_cname);
   fx_copy_str(&src->ke_base_cname, &dst->ke_base_cname);
   FX_COPY_PTR(src->ke_typ, &dst->ke_typ);
   dst->ke_std = src->ke_std;
   dst->ke_tag = src->ke_tag;
   dst->ke_make = src->ke_make;
   FX_COPY_PTR(src->ke_scope, &dst->ke_scope);
   dst->ke_loc = src->ke_loc;
}

static void _fx_make_R17K_form__kdefexn_t(
   struct _fx_R9Ast__id_t* r_ke_name,
   fx_str_t* r_ke_cname,
   fx_str_t* r_ke_base_cname,
   struct _fx_N14K_form__ktyp_t_data_t* r_ke_typ,
   bool r_ke_std,
   struct _fx_R9Ast__id_t* r_ke_tag,
   struct _fx_R9Ast__id_t* r_ke_make,
   struct _fx_LN12Ast__scope_t_data_t* r_ke_scope,
   struct _fx_R10Ast__loc_t* r_ke_loc,
   struct _fx_R17K_form__kdefexn_t* fx_result)
{
   fx_result->ke_name = *r_ke_name;
   fx_copy_str(r_ke_cname, &fx_result->ke_cname);
   fx_copy_str(r_ke_base_cname, &fx_result->ke_base_cname);
   FX_COPY_PTR(r_ke_typ, &fx_result->ke_typ);
   fx_result->ke_std = r_ke_std;
   fx_result->ke_tag = *r_ke_tag;
   fx_result->ke_make = *r_ke_make;
   FX_COPY_PTR(r_ke_scope, &fx_result->ke_scope);
   fx_result->ke_loc = *r_ke_loc;
}

static void _fx_free_rR17K_form__kdefexn_t(struct _fx_rR17K_form__kdefexn_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR17K_form__kdefexn_t, _fx_free_R17K_form__kdefexn_t);
}

static int _fx_make_rR17K_form__kdefexn_t(
   struct _fx_R17K_form__kdefexn_t* arg,
   struct _fx_rR17K_form__kdefexn_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR17K_form__kdefexn_t, _fx_copy_R17K_form__kdefexn_t);
}

static void _fx_free_LN14K_form__ktyp_t(struct _fx_LN14K_form__ktyp_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LN14K_form__ktyp_t, _fx_free_N14K_form__ktyp_t);
}

static int _fx_cons_LN14K_form__ktyp_t(
   struct _fx_N14K_form__ktyp_t_data_t* hd,
   struct _fx_LN14K_form__ktyp_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN14K_form__ktyp_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN14K_form__ktyp_t, FX_COPY_PTR);
}

static void _fx_free_T2R9Ast__id_tLR9Ast__id_t(struct _fx_T2R9Ast__id_tLR9Ast__id_t* dst)
{
   fx_free_list_simple(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tLR9Ast__id_t(
   struct _fx_T2R9Ast__id_tLR9Ast__id_t* src,
   struct _fx_T2R9Ast__id_tLR9Ast__id_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tLR9Ast__id_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_LR9Ast__id_t_data_t* t1,
   struct _fx_T2R9Ast__id_tLR9Ast__id_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_LT2R9Ast__id_tLR9Ast__id_t(struct _fx_LT2R9Ast__id_tLR9Ast__id_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2R9Ast__id_tLR9Ast__id_t, _fx_free_T2R9Ast__id_tLR9Ast__id_t);
}

static int _fx_cons_LT2R9Ast__id_tLR9Ast__id_t(
   struct _fx_T2R9Ast__id_tLR9Ast__id_t* hd,
   struct _fx_LT2R9Ast__id_tLR9Ast__id_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2R9Ast__id_tLR9Ast__id_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2R9Ast__id_tLR9Ast__id_t, _fx_copy_T2R9Ast__id_tLR9Ast__id_t);
}

static void _fx_free_R21K_form__kdefvariant_t(struct _fx_R21K_form__kdefvariant_t* dst)
{
   fx_free_str(&dst->kvar_cname);
   _fx_free_LN14K_form__ktyp_t(&dst->kvar_targs);
   _fx_free_LT2R9Ast__id_tN14K_form__ktyp_t(&dst->kvar_cases);
   fx_free_list_simple(&dst->kvar_ctors);
   _fx_free_LT2R9Ast__id_tLR9Ast__id_t(&dst->kvar_ifaces);
   fx_free_list_simple(&dst->kvar_scope);
}

static void _fx_copy_R21K_form__kdefvariant_t(
   struct _fx_R21K_form__kdefvariant_t* src,
   struct _fx_R21K_form__kdefvariant_t* dst)
{
   dst->kvar_name = src->kvar_name;
   fx_copy_str(&src->kvar_cname, &dst->kvar_cname);
   dst->kvar_proto = src->kvar_proto;
   dst->kvar_props = src->kvar_props;
   FX_COPY_PTR(src->kvar_targs, &dst->kvar_targs);
   FX_COPY_PTR(src->kvar_cases, &dst->kvar_cases);
   FX_COPY_PTR(src->kvar_ctors, &dst->kvar_ctors);
   dst->kvar_flags = src->kvar_flags;
   FX_COPY_PTR(src->kvar_ifaces, &dst->kvar_ifaces);
   FX_COPY_PTR(src->kvar_scope, &dst->kvar_scope);
   dst->kvar_loc = src->kvar_loc;
}

static void _fx_make_R21K_form__kdefvariant_t(
   struct _fx_R9Ast__id_t* r_kvar_name,
   fx_str_t* r_kvar_cname,
   struct _fx_R9Ast__id_t* r_kvar_proto,
   struct _fx_Nt6option1R17K_form__ktprops_t* r_kvar_props,
   struct _fx_LN14K_form__ktyp_t_data_t* r_kvar_targs,
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* r_kvar_cases,
   struct _fx_LR9Ast__id_t_data_t* r_kvar_ctors,
   struct _fx_R16Ast__var_flags_t* r_kvar_flags,
   struct _fx_LT2R9Ast__id_tLR9Ast__id_t_data_t* r_kvar_ifaces,
   struct _fx_LN12Ast__scope_t_data_t* r_kvar_scope,
   struct _fx_R10Ast__loc_t* r_kvar_loc,
   struct _fx_R21K_form__kdefvariant_t* fx_result)
{
   fx_result->kvar_name = *r_kvar_name;
   fx_copy_str(r_kvar_cname, &fx_result->kvar_cname);
   fx_result->kvar_proto = *r_kvar_proto;
   fx_result->kvar_props = *r_kvar_props;
   FX_COPY_PTR(r_kvar_targs, &fx_result->kvar_targs);
   FX_COPY_PTR(r_kvar_cases, &fx_result->kvar_cases);
   FX_COPY_PTR(r_kvar_ctors, &fx_result->kvar_ctors);
   fx_result->kvar_flags = *r_kvar_flags;
   FX_COPY_PTR(r_kvar_ifaces, &fx_result->kvar_ifaces);
   FX_COPY_PTR(r_kvar_scope, &fx_result->kvar_scope);
   fx_result->kvar_loc = *r_kvar_loc;
}

static void _fx_free_rR21K_form__kdefvariant_t(struct _fx_rR21K_form__kdefvariant_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR21K_form__kdefvariant_t, _fx_free_R21K_form__kdefvariant_t);
}

static int _fx_make_rR21K_form__kdefvariant_t(
   struct _fx_R21K_form__kdefvariant_t* arg,
   struct _fx_rR21K_form__kdefvariant_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR21K_form__kdefvariant_t, _fx_copy_R21K_form__kdefvariant_t);
}

static void _fx_free_R17K_form__kdeftyp_t(struct _fx_R17K_form__kdeftyp_t* dst)
{
   fx_free_str(&dst->kt_cname);
   _fx_free_LN14K_form__ktyp_t(&dst->kt_targs);
   _fx_free_N14K_form__ktyp_t(&dst->kt_typ);
   fx_free_list_simple(&dst->kt_scope);
}

static void _fx_copy_R17K_form__kdeftyp_t(struct _fx_R17K_form__kdeftyp_t* src, struct _fx_R17K_form__kdeftyp_t* dst)
{
   dst->kt_name = src->kt_name;
   fx_copy_str(&src->kt_cname, &dst->kt_cname);
   dst->kt_proto = src->kt_proto;
   dst->kt_props = src->kt_props;
   FX_COPY_PTR(src->kt_targs, &dst->kt_targs);
   FX_COPY_PTR(src->kt_typ, &dst->kt_typ);
   FX_COPY_PTR(src->kt_scope, &dst->kt_scope);
   dst->kt_loc = src->kt_loc;
}

static void _fx_make_R17K_form__kdeftyp_t(
   struct _fx_R9Ast__id_t* r_kt_name,
   fx_str_t* r_kt_cname,
   struct _fx_R9Ast__id_t* r_kt_proto,
   struct _fx_Nt6option1R17K_form__ktprops_t* r_kt_props,
   struct _fx_LN14K_form__ktyp_t_data_t* r_kt_targs,
   struct _fx_N14K_form__ktyp_t_data_t* r_kt_typ,
   struct _fx_LN12Ast__scope_t_data_t* r_kt_scope,
   struct _fx_R10Ast__loc_t* r_kt_loc,
   struct _fx_R17K_form__kdeftyp_t* fx_result)
{
   fx_result->kt_name = *r_kt_name;
   fx_copy_str(r_kt_cname, &fx_result->kt_cname);
   fx_result->kt_proto = *r_kt_proto;
   fx_result->kt_props = *r_kt_props;
   FX_COPY_PTR(r_kt_targs, &fx_result->kt_targs);
   FX_COPY_PTR(r_kt_typ, &fx_result->kt_typ);
   FX_COPY_PTR(r_kt_scope, &fx_result->kt_scope);
   fx_result->kt_loc = *r_kt_loc;
}

static void _fx_free_rR17K_form__kdeftyp_t(struct _fx_rR17K_form__kdeftyp_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR17K_form__kdeftyp_t, _fx_free_R17K_form__kdeftyp_t);
}

static int _fx_make_rR17K_form__kdeftyp_t(
   struct _fx_R17K_form__kdeftyp_t* arg,
   struct _fx_rR17K_form__kdeftyp_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR17K_form__kdeftyp_t, _fx_copy_R17K_form__kdeftyp_t);
}

static void _fx_free_R25K_form__kdefclosurevars_t(struct _fx_R25K_form__kdefclosurevars_t* dst)
{
   fx_free_str(&dst->kcv_cname);
   _fx_free_LT2R9Ast__id_tN14K_form__ktyp_t(&dst->kcv_freevars);
   fx_free_list_simple(&dst->kcv_orig_freevars);
   fx_free_list_simple(&dst->kcv_scope);
}

static void _fx_copy_R25K_form__kdefclosurevars_t(
   struct _fx_R25K_form__kdefclosurevars_t* src,
   struct _fx_R25K_form__kdefclosurevars_t* dst)
{
   dst->kcv_name = src->kcv_name;
   fx_copy_str(&src->kcv_cname, &dst->kcv_cname);
   FX_COPY_PTR(src->kcv_freevars, &dst->kcv_freevars);
   FX_COPY_PTR(src->kcv_orig_freevars, &dst->kcv_orig_freevars);
   FX_COPY_PTR(src->kcv_scope, &dst->kcv_scope);
   dst->kcv_loc = src->kcv_loc;
}

static void _fx_make_R25K_form__kdefclosurevars_t(
   struct _fx_R9Ast__id_t* r_kcv_name,
   fx_str_t* r_kcv_cname,
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* r_kcv_freevars,
   struct _fx_LR9Ast__id_t_data_t* r_kcv_orig_freevars,
   struct _fx_LN12Ast__scope_t_data_t* r_kcv_scope,
   struct _fx_R10Ast__loc_t* r_kcv_loc,
   struct _fx_R25K_form__kdefclosurevars_t* fx_result)
{
   fx_result->kcv_name = *r_kcv_name;
   fx_copy_str(r_kcv_cname, &fx_result->kcv_cname);
   FX_COPY_PTR(r_kcv_freevars, &fx_result->kcv_freevars);
   FX_COPY_PTR(r_kcv_orig_freevars, &fx_result->kcv_orig_freevars);
   FX_COPY_PTR(r_kcv_scope, &fx_result->kcv_scope);
   fx_result->kcv_loc = *r_kcv_loc;
}

static void _fx_free_rR25K_form__kdefclosurevars_t(struct _fx_rR25K_form__kdefclosurevars_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR25K_form__kdefclosurevars_t, _fx_free_R25K_form__kdefclosurevars_t);
}

static int _fx_make_rR25K_form__kdefclosurevars_t(
   struct _fx_R25K_form__kdefclosurevars_t* arg,
   struct _fx_rR25K_form__kdefclosurevars_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR25K_form__kdefclosurevars_t, _fx_copy_R25K_form__kdefclosurevars_t);
}

static void _fx_free_N15K_form__kinfo_t(struct _fx_N15K_form__kinfo_t* dst)
{
   switch (dst->tag) {
   case 2:
      _fx_free_R17K_form__kdefval_t(&dst->u.KVal); break;
   case 3:
      _fx_free_rR17K_form__kdeffun_t(&dst->u.KFun); break;
   case 4:
      _fx_free_rR17K_form__kdefexn_t(&dst->u.KExn); break;
   case 5:
      _fx_free_rR21K_form__kdefvariant_t(&dst->u.KVariant); break;
   case 6:
      _fx_free_rR25K_form__kdefclosurevars_t(&dst->u.KClosureVars); break;
   case 7:
      _fx_free_rR23K_form__kdefinterface_t(&dst->u.KInterface); break;
   case 8:
      _fx_free_rR17K_form__kdeftyp_t(&dst->u.KTyp); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_N15K_form__kinfo_t(struct _fx_N15K_form__kinfo_t* src, struct _fx_N15K_form__kinfo_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 2:
      _fx_copy_R17K_form__kdefval_t(&src->u.KVal, &dst->u.KVal); break;
   case 3:
      FX_COPY_PTR(src->u.KFun, &dst->u.KFun); break;
   case 4:
      FX_COPY_PTR(src->u.KExn, &dst->u.KExn); break;
   case 5:
      FX_COPY_PTR(src->u.KVariant, &dst->u.KVariant); break;
   case 6:
      FX_COPY_PTR(src->u.KClosureVars, &dst->u.KClosureVars); break;
   case 7:
      FX_COPY_PTR(src->u.KInterface, &dst->u.KInterface); break;
   case 8:
      FX_COPY_PTR(src->u.KTyp, &dst->u.KTyp); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_T3iA1N15K_form__kinfo_tN15K_form__kinfo_t(struct _fx_T3iA1N15K_form__kinfo_tN15K_form__kinfo_t* dst)
{
   fx_free_arr(&dst->t1);
   _fx_free_N15K_form__kinfo_t(&dst->t2);
}

static void _fx_copy_T3iA1N15K_form__kinfo_tN15K_form__kinfo_t(
   struct _fx_T3iA1N15K_form__kinfo_tN15K_form__kinfo_t* src,
   struct _fx_T3iA1N15K_form__kinfo_tN15K_form__kinfo_t* dst)
{
   dst->t0 = src->t0;
   fx_copy_arr(&src->t1, &dst->t1);
   _fx_copy_N15K_form__kinfo_t(&src->t2, &dst->t2);
}

static void _fx_make_T3iA1N15K_form__kinfo_tN15K_form__kinfo_t(
   int_ t0,
   fx_arr_t* t1,
   struct _fx_N15K_form__kinfo_t* t2,
   struct _fx_T3iA1N15K_form__kinfo_tN15K_form__kinfo_t* fx_result)
{
   fx_result->t0 = t0;
   fx_copy_arr(t1, &fx_result->t1);
   _fx_copy_N15K_form__kinfo_t(t2, &fx_result->t2);
}

static void _fx_free_Nt9Dynvec__t1N15K_form__kinfo_t(struct _fx_Nt9Dynvec__t1N15K_form__kinfo_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      _fx_free_T3iA1N15K_form__kinfo_tN15K_form__kinfo_t(&(*dst)->u.t); fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_Nt6option1N10Ast__exp_t(struct _fx_Nt6option1N10Ast__exp_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      _fx_free_N10Ast__exp_t(&(*dst)->u.Some); fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_T3iA1SS(struct _fx_T3iA1SS* dst)
{
   fx_free_arr(&dst->t1);
   fx_free_str(&dst->t2);
}

static void _fx_copy_T3iA1SS(struct _fx_T3iA1SS* src, struct _fx_T3iA1SS* dst)
{
   dst->t0 = src->t0;
   fx_copy_arr(&src->t1, &dst->t1);
   fx_copy_str(&src->t2, &dst->t2);
}

static void _fx_make_T3iA1SS(int_ t0, fx_arr_t* t1, fx_str_t* t2, struct _fx_T3iA1SS* fx_result)
{
   fx_result->t0 = t0;
   fx_copy_arr(t1, &fx_result->t1);
   fx_copy_str(t2, &fx_result->t2);
}

static void _fx_free_Nt9Dynvec__t1S(struct _fx_Nt9Dynvec__t1S_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      _fx_free_T3iA1SS(&(*dst)->u.t); fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_R13Ast__defval_t(struct _fx_R13Ast__defval_t* dst)
{
   _fx_free_N10Ast__typ_t(&dst->dv_typ);
   _fx_free_R16Ast__val_flags_t(&dst->dv_flags);
   fx_free_list_simple(&dst->dv_scope);
}

static void _fx_copy_R13Ast__defval_t(struct _fx_R13Ast__defval_t* src, struct _fx_R13Ast__defval_t* dst)
{
   dst->dv_name = src->dv_name;
   FX_COPY_PTR(src->dv_typ, &dst->dv_typ);
   _fx_copy_R16Ast__val_flags_t(&src->dv_flags, &dst->dv_flags);
   FX_COPY_PTR(src->dv_scope, &dst->dv_scope);
   dst->dv_loc = src->dv_loc;
}

static void _fx_make_R13Ast__defval_t(
   struct _fx_R9Ast__id_t* r_dv_name,
   struct _fx_N10Ast__typ_t_data_t* r_dv_typ,
   struct _fx_R16Ast__val_flags_t* r_dv_flags,
   struct _fx_LN12Ast__scope_t_data_t* r_dv_scope,
   struct _fx_R10Ast__loc_t* r_dv_loc,
   struct _fx_R13Ast__defval_t* fx_result)
{
   fx_result->dv_name = *r_dv_name;
   FX_COPY_PTR(r_dv_typ, &fx_result->dv_typ);
   _fx_copy_R16Ast__val_flags_t(r_dv_flags, &fx_result->dv_flags);
   FX_COPY_PTR(r_dv_scope, &fx_result->dv_scope);
   fx_result->dv_loc = *r_dv_loc;
}

static void _fx_free_Rt6Map__t2R9Ast__id_tLN16Ast__env_entry_t(struct _fx_Rt6Map__t2R9Ast__id_tLN16Ast__env_entry_t* dst)
{
   _fx_free_Nt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t(&dst->root);
   fx_free_fp(&dst->cmp);
}

static void _fx_copy_Rt6Map__t2R9Ast__id_tLN16Ast__env_entry_t(
   struct _fx_Rt6Map__t2R9Ast__id_tLN16Ast__env_entry_t* src,
   struct _fx_Rt6Map__t2R9Ast__id_tLN16Ast__env_entry_t* dst)
{
   FX_COPY_PTR(src->root, &dst->root);
   FX_COPY_FP(&src->cmp, &dst->cmp);
}

static void _fx_make_Rt6Map__t2R9Ast__id_tLN16Ast__env_entry_t(
   struct _fx_Nt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t_data_t* r_root,
   struct _fx_FPi2R9Ast__id_tR9Ast__id_t* r_cmp,
   struct _fx_Rt6Map__t2R9Ast__id_tLN16Ast__env_entry_t* fx_result)
{
   FX_COPY_PTR(r_root, &fx_result->root);
   FX_COPY_FP(r_cmp, &fx_result->cmp);
}

static void _fx_free_LN10Ast__pat_t(struct _fx_LN10Ast__pat_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LN10Ast__pat_t, _fx_free_N10Ast__pat_t);
}

static int _fx_cons_LN10Ast__pat_t(
   struct _fx_N10Ast__pat_t_data_t* hd,
   struct _fx_LN10Ast__pat_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN10Ast__pat_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN10Ast__pat_t, FX_COPY_PTR);
}

static void _fx_free_rLR9Ast__id_t(struct _fx_rLR9Ast__id_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rLR9Ast__id_t, fx_free_list_simple);
}

static int _fx_make_rLR9Ast__id_t(struct _fx_LR9Ast__id_t_data_t* arg, struct _fx_rLR9Ast__id_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rLR9Ast__id_t, FX_COPY_PTR);
}

static void _fx_free_R13Ast__deffun_t(struct _fx_R13Ast__deffun_t* dst)
{
   fx_free_list_simple(&dst->df_templ_args);
   _fx_free_LN10Ast__pat_t(&dst->df_args);
   _fx_free_N10Ast__typ_t(&dst->df_typ);
   _fx_free_N10Ast__exp_t(&dst->df_body);
   fx_free_list_simple(&dst->df_scope);
   _fx_free_rLR9Ast__id_t(&dst->df_templ_inst);
   _fx_free_Rt6Map__t2R9Ast__id_tLN16Ast__env_entry_t(&dst->df_env);
}

static void _fx_copy_R13Ast__deffun_t(struct _fx_R13Ast__deffun_t* src, struct _fx_R13Ast__deffun_t* dst)
{
   dst->df_name = src->df_name;
   FX_COPY_PTR(src->df_templ_args, &dst->df_templ_args);
   FX_COPY_PTR(src->df_args, &dst->df_args);
   FX_COPY_PTR(src->df_typ, &dst->df_typ);
   FX_COPY_PTR(src->df_body, &dst->df_body);
   dst->df_flags = src->df_flags;
   FX_COPY_PTR(src->df_scope, &dst->df_scope);
   dst->df_loc = src->df_loc;
   FX_COPY_PTR(src->df_templ_inst, &dst->df_templ_inst);
   _fx_copy_Rt6Map__t2R9Ast__id_tLN16Ast__env_entry_t(&src->df_env, &dst->df_env);
}

static void _fx_make_R13Ast__deffun_t(
   struct _fx_R9Ast__id_t* r_df_name,
   struct _fx_LR9Ast__id_t_data_t* r_df_templ_args,
   struct _fx_LN10Ast__pat_t_data_t* r_df_args,
   struct _fx_N10Ast__typ_t_data_t* r_df_typ,
   struct _fx_N10Ast__exp_t_data_t* r_df_body,
   struct _fx_R16Ast__fun_flags_t* r_df_flags,
   struct _fx_LN12Ast__scope_t_data_t* r_df_scope,
   struct _fx_R10Ast__loc_t* r_df_loc,
   struct _fx_rLR9Ast__id_t_data_t* r_df_templ_inst,
   struct _fx_Rt6Map__t2R9Ast__id_tLN16Ast__env_entry_t* r_df_env,
   struct _fx_R13Ast__deffun_t* fx_result)
{
   fx_result->df_name = *r_df_name;
   FX_COPY_PTR(r_df_templ_args, &fx_result->df_templ_args);
   FX_COPY_PTR(r_df_args, &fx_result->df_args);
   FX_COPY_PTR(r_df_typ, &fx_result->df_typ);
   FX_COPY_PTR(r_df_body, &fx_result->df_body);
   fx_result->df_flags = *r_df_flags;
   FX_COPY_PTR(r_df_scope, &fx_result->df_scope);
   fx_result->df_loc = *r_df_loc;
   FX_COPY_PTR(r_df_templ_inst, &fx_result->df_templ_inst);
   _fx_copy_Rt6Map__t2R9Ast__id_tLN16Ast__env_entry_t(r_df_env, &fx_result->df_env);
}

static void _fx_free_rR13Ast__deffun_t(struct _fx_rR13Ast__deffun_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR13Ast__deffun_t, _fx_free_R13Ast__deffun_t);
}

static int _fx_make_rR13Ast__deffun_t(struct _fx_R13Ast__deffun_t* arg, struct _fx_rR13Ast__deffun_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR13Ast__deffun_t, _fx_copy_R13Ast__deffun_t);
}

static void _fx_free_R13Ast__defexn_t(struct _fx_R13Ast__defexn_t* dst)
{
   _fx_free_N10Ast__typ_t(&dst->dexn_typ);
   fx_free_list_simple(&dst->dexn_scope);
}

static void _fx_copy_R13Ast__defexn_t(struct _fx_R13Ast__defexn_t* src, struct _fx_R13Ast__defexn_t* dst)
{
   dst->dexn_name = src->dexn_name;
   FX_COPY_PTR(src->dexn_typ, &dst->dexn_typ);
   FX_COPY_PTR(src->dexn_scope, &dst->dexn_scope);
   dst->dexn_loc = src->dexn_loc;
}

static void _fx_make_R13Ast__defexn_t(
   struct _fx_R9Ast__id_t* r_dexn_name,
   struct _fx_N10Ast__typ_t_data_t* r_dexn_typ,
   struct _fx_LN12Ast__scope_t_data_t* r_dexn_scope,
   struct _fx_R10Ast__loc_t* r_dexn_loc,
   struct _fx_R13Ast__defexn_t* fx_result)
{
   fx_result->dexn_name = *r_dexn_name;
   FX_COPY_PTR(r_dexn_typ, &fx_result->dexn_typ);
   FX_COPY_PTR(r_dexn_scope, &fx_result->dexn_scope);
   fx_result->dexn_loc = *r_dexn_loc;
}

static void _fx_free_rR13Ast__defexn_t(struct _fx_rR13Ast__defexn_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR13Ast__defexn_t, _fx_free_R13Ast__defexn_t);
}

static int _fx_make_rR13Ast__defexn_t(struct _fx_R13Ast__defexn_t* arg, struct _fx_rR13Ast__defexn_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR13Ast__defexn_t, _fx_copy_R13Ast__defexn_t);
}

static void _fx_free_R13Ast__deftyp_t(struct _fx_R13Ast__deftyp_t* dst)
{
   fx_free_list_simple(&dst->dt_templ_args);
   _fx_free_N10Ast__typ_t(&dst->dt_typ);
   fx_free_list_simple(&dst->dt_scope);
}

static void _fx_copy_R13Ast__deftyp_t(struct _fx_R13Ast__deftyp_t* src, struct _fx_R13Ast__deftyp_t* dst)
{
   dst->dt_name = src->dt_name;
   FX_COPY_PTR(src->dt_templ_args, &dst->dt_templ_args);
   FX_COPY_PTR(src->dt_typ, &dst->dt_typ);
   dst->dt_finalized = src->dt_finalized;
   FX_COPY_PTR(src->dt_scope, &dst->dt_scope);
   dst->dt_loc = src->dt_loc;
}

static void _fx_make_R13Ast__deftyp_t(
   struct _fx_R9Ast__id_t* r_dt_name,
   struct _fx_LR9Ast__id_t_data_t* r_dt_templ_args,
   struct _fx_N10Ast__typ_t_data_t* r_dt_typ,
   bool r_dt_finalized,
   struct _fx_LN12Ast__scope_t_data_t* r_dt_scope,
   struct _fx_R10Ast__loc_t* r_dt_loc,
   struct _fx_R13Ast__deftyp_t* fx_result)
{
   fx_result->dt_name = *r_dt_name;
   FX_COPY_PTR(r_dt_templ_args, &fx_result->dt_templ_args);
   FX_COPY_PTR(r_dt_typ, &fx_result->dt_typ);
   fx_result->dt_finalized = r_dt_finalized;
   FX_COPY_PTR(r_dt_scope, &fx_result->dt_scope);
   fx_result->dt_loc = *r_dt_loc;
}

static void _fx_free_rR13Ast__deftyp_t(struct _fx_rR13Ast__deftyp_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR13Ast__deftyp_t, _fx_free_R13Ast__deftyp_t);
}

static int _fx_make_rR13Ast__deftyp_t(struct _fx_R13Ast__deftyp_t* arg, struct _fx_rR13Ast__deftyp_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR13Ast__deftyp_t, _fx_copy_R13Ast__deftyp_t);
}

static void _fx_free_T2R9Ast__id_tN10Ast__typ_t(struct _fx_T2R9Ast__id_tN10Ast__typ_t* dst)
{
   _fx_free_N10Ast__typ_t(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tN10Ast__typ_t(
   struct _fx_T2R9Ast__id_tN10Ast__typ_t* src,
   struct _fx_T2R9Ast__id_tN10Ast__typ_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tN10Ast__typ_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_N10Ast__typ_t_data_t* t1,
   struct _fx_T2R9Ast__id_tN10Ast__typ_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_LT2R9Ast__id_tN10Ast__typ_t(struct _fx_LT2R9Ast__id_tN10Ast__typ_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2R9Ast__id_tN10Ast__typ_t, _fx_free_T2R9Ast__id_tN10Ast__typ_t);
}

static int _fx_cons_LT2R9Ast__id_tN10Ast__typ_t(
   struct _fx_T2R9Ast__id_tN10Ast__typ_t* hd,
   struct _fx_LT2R9Ast__id_tN10Ast__typ_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2R9Ast__id_tN10Ast__typ_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2R9Ast__id_tN10Ast__typ_t, _fx_copy_T2R9Ast__id_tN10Ast__typ_t);
}

static int _fx_cons_LTa2R9Ast__id_t(
   struct _fx_Ta2R9Ast__id_t* hd,
   struct _fx_LTa2R9Ast__id_t_data_t* tl,
   bool addref_tl,
   struct _fx_LTa2R9Ast__id_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LTa2R9Ast__id_t, FX_COPY_SIMPLE_BY_PTR);
}

static void _fx_free_T2R9Ast__id_tLTa2R9Ast__id_t(struct _fx_T2R9Ast__id_tLTa2R9Ast__id_t* dst)
{
   fx_free_list_simple(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tLTa2R9Ast__id_t(
   struct _fx_T2R9Ast__id_tLTa2R9Ast__id_t* src,
   struct _fx_T2R9Ast__id_tLTa2R9Ast__id_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tLTa2R9Ast__id_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_LTa2R9Ast__id_t_data_t* t1,
   struct _fx_T2R9Ast__id_tLTa2R9Ast__id_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_LT2R9Ast__id_tLTa2R9Ast__id_t(struct _fx_LT2R9Ast__id_tLTa2R9Ast__id_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2R9Ast__id_tLTa2R9Ast__id_t, _fx_free_T2R9Ast__id_tLTa2R9Ast__id_t);
}

static int _fx_cons_LT2R9Ast__id_tLTa2R9Ast__id_t(
   struct _fx_T2R9Ast__id_tLTa2R9Ast__id_t* hd,
   struct _fx_LT2R9Ast__id_tLTa2R9Ast__id_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2R9Ast__id_tLTa2R9Ast__id_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2R9Ast__id_tLTa2R9Ast__id_t, _fx_copy_T2R9Ast__id_tLTa2R9Ast__id_t);
}

static void _fx_free_R17Ast__defvariant_t(struct _fx_R17Ast__defvariant_t* dst)
{
   fx_free_list_simple(&dst->dvar_templ_args);
   _fx_free_N10Ast__typ_t(&dst->dvar_alias);
   _fx_free_LT2R9Ast__id_tN10Ast__typ_t(&dst->dvar_cases);
   fx_free_list_simple(&dst->dvar_ctors);
   _fx_free_rLR9Ast__id_t(&dst->dvar_templ_inst);
   _fx_free_LT2R9Ast__id_tLTa2R9Ast__id_t(&dst->dvar_ifaces);
   fx_free_list_simple(&dst->dvar_scope);
}

static void _fx_copy_R17Ast__defvariant_t(struct _fx_R17Ast__defvariant_t* src, struct _fx_R17Ast__defvariant_t* dst)
{
   dst->dvar_name = src->dvar_name;
   FX_COPY_PTR(src->dvar_templ_args, &dst->dvar_templ_args);
   FX_COPY_PTR(src->dvar_alias, &dst->dvar_alias);
   dst->dvar_flags = src->dvar_flags;
   FX_COPY_PTR(src->dvar_cases, &dst->dvar_cases);
   FX_COPY_PTR(src->dvar_ctors, &dst->dvar_ctors);
   FX_COPY_PTR(src->dvar_templ_inst, &dst->dvar_templ_inst);
   FX_COPY_PTR(src->dvar_ifaces, &dst->dvar_ifaces);
   FX_COPY_PTR(src->dvar_scope, &dst->dvar_scope);
   dst->dvar_loc = src->dvar_loc;
}

static void _fx_make_R17Ast__defvariant_t(
   struct _fx_R9Ast__id_t* r_dvar_name,
   struct _fx_LR9Ast__id_t_data_t* r_dvar_templ_args,
   struct _fx_N10Ast__typ_t_data_t* r_dvar_alias,
   struct _fx_R16Ast__var_flags_t* r_dvar_flags,
   struct _fx_LT2R9Ast__id_tN10Ast__typ_t_data_t* r_dvar_cases,
   struct _fx_LR9Ast__id_t_data_t* r_dvar_ctors,
   struct _fx_rLR9Ast__id_t_data_t* r_dvar_templ_inst,
   struct _fx_LT2R9Ast__id_tLTa2R9Ast__id_t_data_t* r_dvar_ifaces,
   struct _fx_LN12Ast__scope_t_data_t* r_dvar_scope,
   struct _fx_R10Ast__loc_t* r_dvar_loc,
   struct _fx_R17Ast__defvariant_t* fx_result)
{
   fx_result->dvar_name = *r_dvar_name;
   FX_COPY_PTR(r_dvar_templ_args, &fx_result->dvar_templ_args);
   FX_COPY_PTR(r_dvar_alias, &fx_result->dvar_alias);
   fx_result->dvar_flags = *r_dvar_flags;
   FX_COPY_PTR(r_dvar_cases, &fx_result->dvar_cases);
   FX_COPY_PTR(r_dvar_ctors, &fx_result->dvar_ctors);
   FX_COPY_PTR(r_dvar_templ_inst, &fx_result->dvar_templ_inst);
   FX_COPY_PTR(r_dvar_ifaces, &fx_result->dvar_ifaces);
   FX_COPY_PTR(r_dvar_scope, &fx_result->dvar_scope);
   fx_result->dvar_loc = *r_dvar_loc;
}

static void _fx_free_rR17Ast__defvariant_t(struct _fx_rR17Ast__defvariant_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR17Ast__defvariant_t, _fx_free_R17Ast__defvariant_t);
}

static int _fx_make_rR17Ast__defvariant_t(
   struct _fx_R17Ast__defvariant_t* arg,
   struct _fx_rR17Ast__defvariant_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR17Ast__defvariant_t, _fx_copy_R17Ast__defvariant_t);
}

static void _fx_free_T3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t(
   struct _fx_T3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t* dst)
{
   _fx_free_N10Ast__typ_t(&dst->t1);
}

static void _fx_copy_T3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t(
   struct _fx_T3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t* src,
   struct _fx_T3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_N10Ast__typ_t_data_t* t1,
   struct _fx_R16Ast__fun_flags_t* t2,
   struct _fx_T3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_LT3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t(
   struct _fx_LT3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t,
      _fx_free_T3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t);
}

static int _fx_cons_LT3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t(
   struct _fx_T3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t* hd,
   struct _fx_LT3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t,
      _fx_copy_T3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t);
}

static void _fx_free_R19Ast__definterface_t(struct _fx_R19Ast__definterface_t* dst)
{
   _fx_free_LT3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t(&dst->di_new_methods);
   _fx_free_LT3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t(&dst->di_all_methods);
   fx_free_list_simple(&dst->di_scope);
}

static void _fx_copy_R19Ast__definterface_t(struct _fx_R19Ast__definterface_t* src, struct _fx_R19Ast__definterface_t* dst)
{
   dst->di_name = src->di_name;
   dst->di_base = src->di_base;
   FX_COPY_PTR(src->di_new_methods, &dst->di_new_methods);
   FX_COPY_PTR(src->di_all_methods, &dst->di_all_methods);
   FX_COPY_PTR(src->di_scope, &dst->di_scope);
   dst->di_loc = src->di_loc;
}

static void _fx_make_R19Ast__definterface_t(
   struct _fx_R9Ast__id_t* r_di_name,
   struct _fx_R9Ast__id_t* r_di_base,
   struct _fx_LT3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t_data_t* r_di_new_methods,
   struct _fx_LT3R9Ast__id_tN10Ast__typ_tR16Ast__fun_flags_t_data_t* r_di_all_methods,
   struct _fx_LN12Ast__scope_t_data_t* r_di_scope,
   struct _fx_R10Ast__loc_t* r_di_loc,
   struct _fx_R19Ast__definterface_t* fx_result)
{
   fx_result->di_name = *r_di_name;
   fx_result->di_base = *r_di_base;
   FX_COPY_PTR(r_di_new_methods, &fx_result->di_new_methods);
   FX_COPY_PTR(r_di_all_methods, &fx_result->di_all_methods);
   FX_COPY_PTR(r_di_scope, &fx_result->di_scope);
   fx_result->di_loc = *r_di_loc;
}

static void _fx_free_rR19Ast__definterface_t(struct _fx_rR19Ast__definterface_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR19Ast__definterface_t, _fx_free_R19Ast__definterface_t);
}

static int _fx_make_rR19Ast__definterface_t(
   struct _fx_R19Ast__definterface_t* arg,
   struct _fx_rR19Ast__definterface_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR19Ast__definterface_t, _fx_copy_R19Ast__definterface_t);
}

static void _fx_free_N14Ast__id_info_t(struct _fx_N14Ast__id_info_t* dst)
{
   switch (dst->tag) {
   case 2:
      _fx_free_R13Ast__defval_t(&dst->u.IdDVal); break;
   case 3:
      _fx_free_rR13Ast__deffun_t(&dst->u.IdFun); break;
   case 4:
      _fx_free_rR13Ast__defexn_t(&dst->u.IdExn); break;
   case 5:
      _fx_free_rR13Ast__deftyp_t(&dst->u.IdTyp); break;
   case 6:
      _fx_free_rR17Ast__defvariant_t(&dst->u.IdVariant); break;
   case 7:
      _fx_free_rR19Ast__definterface_t(&dst->u.IdInterface); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_N14Ast__id_info_t(struct _fx_N14Ast__id_info_t* src, struct _fx_N14Ast__id_info_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 2:
      _fx_copy_R13Ast__defval_t(&src->u.IdDVal, &dst->u.IdDVal); break;
   case 3:
      FX_COPY_PTR(src->u.IdFun, &dst->u.IdFun); break;
   case 4:
      FX_COPY_PTR(src->u.IdExn, &dst->u.IdExn); break;
   case 5:
      FX_COPY_PTR(src->u.IdTyp, &dst->u.IdTyp); break;
   case 6:
      FX_COPY_PTR(src->u.IdVariant, &dst->u.IdVariant); break;
   case 7:
      FX_COPY_PTR(src->u.IdInterface, &dst->u.IdInterface); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_T3iA1N14Ast__id_info_tN14Ast__id_info_t(struct _fx_T3iA1N14Ast__id_info_tN14Ast__id_info_t* dst)
{
   fx_free_arr(&dst->t1);
   _fx_free_N14Ast__id_info_t(&dst->t2);
}

static void _fx_copy_T3iA1N14Ast__id_info_tN14Ast__id_info_t(
   struct _fx_T3iA1N14Ast__id_info_tN14Ast__id_info_t* src,
   struct _fx_T3iA1N14Ast__id_info_tN14Ast__id_info_t* dst)
{
   dst->t0 = src->t0;
   fx_copy_arr(&src->t1, &dst->t1);
   _fx_copy_N14Ast__id_info_t(&src->t2, &dst->t2);
}

static void _fx_make_T3iA1N14Ast__id_info_tN14Ast__id_info_t(
   int_ t0,
   fx_arr_t* t1,
   struct _fx_N14Ast__id_info_t* t2,
   struct _fx_T3iA1N14Ast__id_info_tN14Ast__id_info_t* fx_result)
{
   fx_result->t0 = t0;
   fx_copy_arr(t1, &fx_result->t1);
   _fx_copy_N14Ast__id_info_t(t2, &fx_result->t2);
}

static void _fx_free_Nt9Dynvec__t1N14Ast__id_info_t(struct _fx_Nt9Dynvec__t1N14Ast__id_info_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      _fx_free_T3iA1N14Ast__id_info_tN14Ast__id_info_t(&(*dst)->u.t); fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_LN16Ast__env_entry_t(struct _fx_LN16Ast__env_entry_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LN16Ast__env_entry_t, _fx_free_N16Ast__env_entry_t);
}

static int _fx_cons_LN16Ast__env_entry_t(
   struct _fx_N16Ast__env_entry_t_data_t* hd,
   struct _fx_LN16Ast__env_entry_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN16Ast__env_entry_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN16Ast__env_entry_t, FX_COPY_PTR);
}

static void
   _fx_free_T5N12Map__color_tNt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_tR9Ast__id_tLN16Ast__env_entry_tNt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t(
   struct _fx_T5N12Map__color_tNt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_tR9Ast__id_tLN16Ast__env_entry_tNt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t*
      dst)
{
   _fx_free_Nt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t(&dst->t1);
   _fx_free_LN16Ast__env_entry_t(&dst->t3);
   _fx_free_Nt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t(&dst->t4);
}

static void
   _fx_copy_T5N12Map__color_tNt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_tR9Ast__id_tLN16Ast__env_entry_tNt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t(
   struct _fx_T5N12Map__color_tNt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_tR9Ast__id_tLN16Ast__env_entry_tNt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t*
      src,
   struct _fx_T5N12Map__color_tNt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_tR9Ast__id_tLN16Ast__env_entry_tNt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t*
      dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
   FX_COPY_PTR(src->t3, &dst->t3);
   FX_COPY_PTR(src->t4, &dst->t4);
}

static void
   _fx_make_T5N12Map__color_tNt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_tR9Ast__id_tLN16Ast__env_entry_tNt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t(
   struct _fx_N12Map__color_t* t0,
   struct _fx_Nt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t_data_t* t1,
   struct _fx_R9Ast__id_t* t2,
   struct _fx_LN16Ast__env_entry_t_data_t* t3,
   struct _fx_Nt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t_data_t* t4,
   struct _fx_T5N12Map__color_tNt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_tR9Ast__id_tLN16Ast__env_entry_tNt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t*
      fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
   FX_COPY_PTR(t3, &fx_result->t3);
   FX_COPY_PTR(t4, &fx_result->t4);
}

static void _fx_free_Nt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t(
   struct _fx_Nt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      _fx_free_T5N12Map__color_tNt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_tR9Ast__id_tLN16Ast__env_entry_tNt11Map__tree_t2R9Ast__id_tLN16Ast__env_entry_t(
         &(*dst)->u.Node);
      fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_T2R10Ast__loc_tS(struct _fx_T2R10Ast__loc_tS* dst)
{
   fx_free_str(&dst->t1);
}

static void _fx_copy_T2R10Ast__loc_tS(struct _fx_T2R10Ast__loc_tS* src, struct _fx_T2R10Ast__loc_tS* dst)
{
   dst->t0 = src->t0;
   fx_copy_str(&src->t1, &dst->t1);
}

static void _fx_make_T2R10Ast__loc_tS(struct _fx_R10Ast__loc_t* t0, fx_str_t* t1, struct _fx_T2R10Ast__loc_tS* fx_result)
{
   fx_result->t0 = *t0;
   fx_copy_str(t1, &fx_result->t1);
}

static void _fx_free_N10Ast__lit_t(struct _fx_N10Ast__lit_t* dst)
{
   switch (dst->tag) {
   case 5:
      fx_free_str(&dst->u.LitString); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_N10Ast__lit_t(struct _fx_N10Ast__lit_t* src, struct _fx_N10Ast__lit_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 5:
      fx_copy_str(&src->u.LitString, &dst->u.LitString); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_rNt6option1N10Ast__typ_t(struct _fx_rNt6option1N10Ast__typ_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rNt6option1N10Ast__typ_t, _fx_free_Nt6option1N10Ast__typ_t);
}

static int _fx_make_rNt6option1N10Ast__typ_t(
   struct _fx_Nt6option1N10Ast__typ_t_data_t* arg,
   struct _fx_rNt6option1N10Ast__typ_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rNt6option1N10Ast__typ_t, FX_COPY_PTR);
}

static void _fx_free_LN10Ast__typ_t(struct _fx_LN10Ast__typ_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LN10Ast__typ_t, _fx_free_N10Ast__typ_t);
}

static int _fx_cons_LN10Ast__typ_t(
   struct _fx_N10Ast__typ_t_data_t* hd,
   struct _fx_LN10Ast__typ_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN10Ast__typ_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN10Ast__typ_t, FX_COPY_PTR);
}

static void _fx_free_T2LN10Ast__typ_tN10Ast__typ_t(struct _fx_T2LN10Ast__typ_tN10Ast__typ_t* dst)
{
   _fx_free_LN10Ast__typ_t(&dst->t0);
   _fx_free_N10Ast__typ_t(&dst->t1);
}

static void _fx_copy_T2LN10Ast__typ_tN10Ast__typ_t(
   struct _fx_T2LN10Ast__typ_tN10Ast__typ_t* src,
   struct _fx_T2LN10Ast__typ_tN10Ast__typ_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2LN10Ast__typ_tN10Ast__typ_t(
   struct _fx_LN10Ast__typ_t_data_t* t0,
   struct _fx_N10Ast__typ_t_data_t* t1,
   struct _fx_T2LN10Ast__typ_tN10Ast__typ_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_T2iN10Ast__typ_t(struct _fx_T2iN10Ast__typ_t* dst)
{
   _fx_free_N10Ast__typ_t(&dst->t1);
}

static void _fx_copy_T2iN10Ast__typ_t(struct _fx_T2iN10Ast__typ_t* src, struct _fx_T2iN10Ast__typ_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2iN10Ast__typ_t(int_ t0, struct _fx_N10Ast__typ_t_data_t* t1, struct _fx_T2iN10Ast__typ_t* fx_result)
{
   fx_result->t0 = t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_T4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t(
   struct _fx_T4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t* dst)
{
   _fx_free_R16Ast__val_flags_t(&dst->t0);
   _fx_free_N10Ast__typ_t(&dst->t2);
   _fx_free_N10Ast__exp_t(&dst->t3);
}

static void _fx_copy_T4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t(
   struct _fx_T4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t* src,
   struct _fx_T4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t* dst)
{
   _fx_copy_R16Ast__val_flags_t(&src->t0, &dst->t0);
   dst->t1 = src->t1;
   FX_COPY_PTR(src->t2, &dst->t2);
   FX_COPY_PTR(src->t3, &dst->t3);
}

static void _fx_make_T4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t(
   struct _fx_R16Ast__val_flags_t* t0,
   struct _fx_R9Ast__id_t* t1,
   struct _fx_N10Ast__typ_t_data_t* t2,
   struct _fx_N10Ast__exp_t_data_t* t3,
   struct _fx_T4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t* fx_result)
{
   _fx_copy_R16Ast__val_flags_t(t0, &fx_result->t0);
   fx_result->t1 = *t1;
   FX_COPY_PTR(t2, &fx_result->t2);
   FX_COPY_PTR(t3, &fx_result->t3);
}

static void _fx_free_LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t(
   struct _fx_LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t,
      _fx_free_T4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t);
}

static int _fx_cons_LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t(
   struct _fx_T4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t* hd,
   struct _fx_LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t,
      _fx_copy_T4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t);
}

static void _fx_free_T2LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_tB(
   struct _fx_T2LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_tB* dst)
{
   _fx_free_LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t(&dst->t0);
}

static void _fx_copy_T2LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_tB(
   struct _fx_T2LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_tB* src,
   struct _fx_T2LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_tB* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_tB(
   struct _fx_LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_t_data_t* t0,
   bool t1,
   struct _fx_T2LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_tB* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   fx_result->t1 = t1;
}

static void _fx_free_rT2LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_tB(
   struct _fx_rT2LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_tB_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rT2LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_tB,
      _fx_free_T2LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_tB);
}

static int _fx_make_rT2LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_tB(
   struct _fx_T2LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_tB* arg,
   struct _fx_rT2LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_tB_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rT2LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_tB,
      _fx_copy_T2LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_tB);
}

static void _fx_free_T2LN10Ast__typ_tR9Ast__id_t(struct _fx_T2LN10Ast__typ_tR9Ast__id_t* dst)
{
   _fx_free_LN10Ast__typ_t(&dst->t0);
}

static void _fx_copy_T2LN10Ast__typ_tR9Ast__id_t(
   struct _fx_T2LN10Ast__typ_tR9Ast__id_t* src,
   struct _fx_T2LN10Ast__typ_tR9Ast__id_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2LN10Ast__typ_tR9Ast__id_t(
   struct _fx_LN10Ast__typ_t_data_t* t0,
   struct _fx_R9Ast__id_t* t1,
   struct _fx_T2LN10Ast__typ_tR9Ast__id_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   fx_result->t1 = *t1;
}

static void _fx_free_N10Ast__typ_t(struct _fx_N10Ast__typ_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      switch ((*dst)->tag) {
      case 1:
         _fx_free_rNt6option1N10Ast__typ_t(&(*dst)->u.TypVar); break;
      case 2:
         _fx_free_Nt6option1N10Ast__typ_t(&(*dst)->u.TypVarTuple); break;
      case 3:
         _fx_free_N10Ast__typ_t(&(*dst)->u.TypVarArray); break;
      case 14:
         _fx_free_T2LN10Ast__typ_tN10Ast__typ_t(&(*dst)->u.TypFun); break;
      case 15:
         _fx_free_N10Ast__typ_t(&(*dst)->u.TypList); break;
      case 16:
         _fx_free_N10Ast__typ_t(&(*dst)->u.TypVector); break;
      case 17:
         _fx_free_LN10Ast__typ_t(&(*dst)->u.TypTuple); break;
      case 18:
         _fx_free_N10Ast__typ_t(&(*dst)->u.TypRef); break;
      case 19:
         _fx_free_T2iN10Ast__typ_t(&(*dst)->u.TypArray); break;
      case 20:
         _fx_free_rT2LT4R16Ast__val_flags_tR9Ast__id_tN10Ast__typ_tN10Ast__exp_tB(&(*dst)->u.TypRecord); break;
      case 24:
         _fx_free_T2LN10Ast__typ_tR9Ast__id_t(&(*dst)->u.TypApp); break;
      default:
         ;
      }
      fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_N13Ast__binary_t(struct _fx_N13Ast__binary_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      switch ((*dst)->tag) {
      case 27:
         _fx_free_N13Ast__binary_t(&(*dst)->u.OpAugBinary); break;
      default:
         ;
      }
      fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_T2Nt6option1N10Ast__exp_tR10Ast__loc_t(struct _fx_T2Nt6option1N10Ast__exp_tR10Ast__loc_t* dst)
{
   _fx_free_Nt6option1N10Ast__exp_t(&dst->t0);
}

static void _fx_copy_T2Nt6option1N10Ast__exp_tR10Ast__loc_t(
   struct _fx_T2Nt6option1N10Ast__exp_tR10Ast__loc_t* src,
   struct _fx_T2Nt6option1N10Ast__exp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2Nt6option1N10Ast__exp_tR10Ast__loc_t(
   struct _fx_Nt6option1N10Ast__exp_t_data_t* t0,
   struct _fx_R10Ast__loc_t* t1,
   struct _fx_T2Nt6option1N10Ast__exp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   fx_result->t1 = *t1;
}

static void _fx_free_T2N10Ast__typ_tR10Ast__loc_t(struct _fx_T2N10Ast__typ_tR10Ast__loc_t* dst)
{
   _fx_free_N10Ast__typ_t(&dst->t0);
}

static void _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t* src,
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_N10Ast__typ_t_data_t* t0,
   struct _fx_R10Ast__loc_t* t1,
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   fx_result->t1 = *t1;
}

static void _fx_free_T4Nt6option1N10Ast__exp_tNt6option1N10Ast__exp_tNt6option1N10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T4Nt6option1N10Ast__exp_tNt6option1N10Ast__exp_tNt6option1N10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   _fx_free_Nt6option1N10Ast__exp_t(&dst->t0);
   _fx_free_Nt6option1N10Ast__exp_t(&dst->t1);
   _fx_free_Nt6option1N10Ast__exp_t(&dst->t2);
   _fx_free_T2N10Ast__typ_tR10Ast__loc_t(&dst->t3);
}

static void _fx_copy_T4Nt6option1N10Ast__exp_tNt6option1N10Ast__exp_tNt6option1N10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T4Nt6option1N10Ast__exp_tNt6option1N10Ast__exp_tNt6option1N10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* src,
   struct _fx_T4Nt6option1N10Ast__exp_tNt6option1N10Ast__exp_tNt6option1N10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   FX_COPY_PTR(src->t2, &dst->t2);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(&src->t3, &dst->t3);
}

static void _fx_make_T4Nt6option1N10Ast__exp_tNt6option1N10Ast__exp_tNt6option1N10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_Nt6option1N10Ast__exp_t_data_t* t0,
   struct _fx_Nt6option1N10Ast__exp_t_data_t* t1,
   struct _fx_Nt6option1N10Ast__exp_t_data_t* t2,
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t* t3,
   struct _fx_T4Nt6option1N10Ast__exp_tNt6option1N10Ast__exp_tNt6option1N10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   FX_COPY_PTR(t2, &fx_result->t2);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(t3, &fx_result->t3);
}

static void _fx_free_T2N10Ast__lit_tT2N10Ast__typ_tR10Ast__loc_t(struct _fx_T2N10Ast__lit_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   _fx_free_N10Ast__lit_t(&dst->t0);
   _fx_free_T2N10Ast__typ_tR10Ast__loc_t(&dst->t1);
}

static void _fx_copy_T2N10Ast__lit_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T2N10Ast__lit_tT2N10Ast__typ_tR10Ast__loc_t* src,
   struct _fx_T2N10Ast__lit_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   _fx_copy_N10Ast__lit_t(&src->t0, &dst->t0);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(&src->t1, &dst->t1);
}

static void _fx_make_T2N10Ast__lit_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_N10Ast__lit_t* t0,
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t* t1,
   struct _fx_T2N10Ast__lit_tT2N10Ast__typ_tR10Ast__loc_t* fx_result)
{
   _fx_copy_N10Ast__lit_t(t0, &fx_result->t0);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(t1, &fx_result->t1);
}

static void _fx_free_T2R9Ast__id_tT2N10Ast__typ_tR10Ast__loc_t(struct _fx_T2R9Ast__id_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   _fx_free_T2N10Ast__typ_tR10Ast__loc_t(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T2R9Ast__id_tT2N10Ast__typ_tR10Ast__loc_t* src,
   struct _fx_T2R9Ast__id_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(&src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t* t1,
   struct _fx_T2R9Ast__id_tT2N10Ast__typ_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(t1, &fx_result->t1);
}

static void _fx_free_T4N13Ast__binary_tN10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T4N13Ast__binary_tN10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   _fx_free_N13Ast__binary_t(&dst->t0);
   _fx_free_N10Ast__exp_t(&dst->t1);
   _fx_free_N10Ast__exp_t(&dst->t2);
   _fx_free_T2N10Ast__typ_tR10Ast__loc_t(&dst->t3);
}

static void _fx_copy_T4N13Ast__binary_tN10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T4N13Ast__binary_tN10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* src,
   struct _fx_T4N13Ast__binary_tN10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   FX_COPY_PTR(src->t2, &dst->t2);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(&src->t3, &dst->t3);
}

static void _fx_make_T4N13Ast__binary_tN10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_N13Ast__binary_t_data_t* t0,
   struct _fx_N10Ast__exp_t_data_t* t1,
   struct _fx_N10Ast__exp_t_data_t* t2,
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t* t3,
   struct _fx_T4N13Ast__binary_tN10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   FX_COPY_PTR(t2, &fx_result->t2);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(t3, &fx_result->t3);
}

static void _fx_free_T3N12Ast__unary_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T3N12Ast__unary_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   _fx_free_N10Ast__exp_t(&dst->t1);
   _fx_free_T2N10Ast__typ_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3N12Ast__unary_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T3N12Ast__unary_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* src,
   struct _fx_T3N12Ast__unary_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3N12Ast__unary_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_N12Ast__unary_t* t0,
   struct _fx_N10Ast__exp_t_data_t* t1,
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t* t2,
   struct _fx_T3N12Ast__unary_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_LN10Ast__exp_t(struct _fx_LN10Ast__exp_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LN10Ast__exp_t, _fx_free_N10Ast__exp_t);
}

static int _fx_cons_LN10Ast__exp_t(
   struct _fx_N10Ast__exp_t_data_t* hd,
   struct _fx_LN10Ast__exp_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN10Ast__exp_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN10Ast__exp_t, FX_COPY_PTR);
}

static void _fx_free_T3N13Ast__intrin_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T3N13Ast__intrin_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   _fx_free_LN10Ast__exp_t(&dst->t1);
   _fx_free_T2N10Ast__typ_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3N13Ast__intrin_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T3N13Ast__intrin_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* src,
   struct _fx_T3N13Ast__intrin_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3N13Ast__intrin_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_N13Ast__intrin_t* t0,
   struct _fx_LN10Ast__exp_t_data_t* t1,
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t* t2,
   struct _fx_T3N13Ast__intrin_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_T2R9Ast__id_tN10Ast__exp_t(struct _fx_T2R9Ast__id_tN10Ast__exp_t* dst)
{
   _fx_free_N10Ast__exp_t(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tN10Ast__exp_t(
   struct _fx_T2R9Ast__id_tN10Ast__exp_t* src,
   struct _fx_T2R9Ast__id_tN10Ast__exp_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tN10Ast__exp_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_N10Ast__exp_t_data_t* t1,
   struct _fx_T2R9Ast__id_tN10Ast__exp_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_T2LN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(struct _fx_T2LN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   _fx_free_LN10Ast__exp_t(&dst->t0);
   _fx_free_T2N10Ast__typ_tR10Ast__loc_t(&dst->t1);
}

static void _fx_copy_T2LN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T2LN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* src,
   struct _fx_T2LN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(&src->t1, &dst->t1);
}

static void _fx_make_T2LN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_LN10Ast__exp_t_data_t* t0,
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t* t1,
   struct _fx_T2LN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(t1, &fx_result->t1);
}

static void _fx_free_LLN10Ast__exp_t(struct _fx_LLN10Ast__exp_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LLN10Ast__exp_t, _fx_free_LN10Ast__exp_t);
}

static int _fx_cons_LLN10Ast__exp_t(
   struct _fx_LN10Ast__exp_t_data_t* hd,
   struct _fx_LLN10Ast__exp_t_data_t* tl,
   bool addref_tl,
   struct _fx_LLN10Ast__exp_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LLN10Ast__exp_t, FX_COPY_PTR);
}

static void _fx_free_T2LLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T2LLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   _fx_free_LLN10Ast__exp_t(&dst->t0);
   _fx_free_T2N10Ast__typ_tR10Ast__loc_t(&dst->t1);
}

static void _fx_copy_T2LLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T2LLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* src,
   struct _fx_T2LLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(&src->t1, &dst->t1);
}

static void _fx_make_T2LLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_LLN10Ast__exp_t_data_t* t0,
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t* t1,
   struct _fx_T2LLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(t1, &fx_result->t1);
}

static void _fx_free_LT2R9Ast__id_tN10Ast__exp_t(struct _fx_LT2R9Ast__id_tN10Ast__exp_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2R9Ast__id_tN10Ast__exp_t, _fx_free_T2R9Ast__id_tN10Ast__exp_t);
}

static int _fx_cons_LT2R9Ast__id_tN10Ast__exp_t(
   struct _fx_T2R9Ast__id_tN10Ast__exp_t* hd,
   struct _fx_LT2R9Ast__id_tN10Ast__exp_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2R9Ast__id_tN10Ast__exp_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2R9Ast__id_tN10Ast__exp_t, _fx_copy_T2R9Ast__id_tN10Ast__exp_t);
}

static void _fx_free_T3N10Ast__exp_tLT2R9Ast__id_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T3N10Ast__exp_tLT2R9Ast__id_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   _fx_free_N10Ast__exp_t(&dst->t0);
   _fx_free_LT2R9Ast__id_tN10Ast__exp_t(&dst->t1);
   _fx_free_T2N10Ast__typ_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3N10Ast__exp_tLT2R9Ast__id_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T3N10Ast__exp_tLT2R9Ast__id_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* src,
   struct _fx_T3N10Ast__exp_tLT2R9Ast__id_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3N10Ast__exp_tLT2R9Ast__id_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_N10Ast__exp_t_data_t* t0,
   struct _fx_LT2R9Ast__id_tN10Ast__exp_t_data_t* t1,
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t* t2,
   struct _fx_T3N10Ast__exp_tLT2R9Ast__id_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_T3N10Ast__exp_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T3N10Ast__exp_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   _fx_free_N10Ast__exp_t(&dst->t0);
   _fx_free_LN10Ast__exp_t(&dst->t1);
   _fx_free_T2N10Ast__typ_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3N10Ast__exp_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T3N10Ast__exp_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* src,
   struct _fx_T3N10Ast__exp_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3N10Ast__exp_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_N10Ast__exp_t_data_t* t0,
   struct _fx_LN10Ast__exp_t_data_t* t1,
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t* t2,
   struct _fx_T3N10Ast__exp_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_T5N10Ast__exp_tN13Ast__border_tN18Ast__interpolate_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T5N10Ast__exp_tN13Ast__border_tN18Ast__interpolate_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   _fx_free_N10Ast__exp_t(&dst->t0);
   _fx_free_LN10Ast__exp_t(&dst->t3);
   _fx_free_T2N10Ast__typ_tR10Ast__loc_t(&dst->t4);
}

static void _fx_copy_T5N10Ast__exp_tN13Ast__border_tN18Ast__interpolate_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T5N10Ast__exp_tN13Ast__border_tN18Ast__interpolate_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* src,
   struct _fx_T5N10Ast__exp_tN13Ast__border_tN18Ast__interpolate_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   dst->t1 = src->t1;
   dst->t2 = src->t2;
   FX_COPY_PTR(src->t3, &dst->t3);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(&src->t4, &dst->t4);
}

static void _fx_make_T5N10Ast__exp_tN13Ast__border_tN18Ast__interpolate_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_N10Ast__exp_t_data_t* t0,
   struct _fx_N13Ast__border_t* t1,
   struct _fx_N18Ast__interpolate_t* t2,
   struct _fx_LN10Ast__exp_t_data_t* t3,
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t* t4,
   struct _fx_T5N10Ast__exp_tN13Ast__border_tN18Ast__interpolate_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   fx_result->t1 = *t1;
   fx_result->t2 = *t2;
   FX_COPY_PTR(t3, &fx_result->t3);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(t4, &fx_result->t4);
}

static void _fx_free_T3N10Ast__exp_tN10Ast__exp_tR10Ast__loc_t(struct _fx_T3N10Ast__exp_tN10Ast__exp_tR10Ast__loc_t* dst)
{
   _fx_free_N10Ast__exp_t(&dst->t0);
   _fx_free_N10Ast__exp_t(&dst->t1);
}

static void _fx_copy_T3N10Ast__exp_tN10Ast__exp_tR10Ast__loc_t(
   struct _fx_T3N10Ast__exp_tN10Ast__exp_tR10Ast__loc_t* src,
   struct _fx_T3N10Ast__exp_tN10Ast__exp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3N10Ast__exp_tN10Ast__exp_tR10Ast__loc_t(
   struct _fx_N10Ast__exp_t_data_t* t0,
   struct _fx_N10Ast__exp_t_data_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3N10Ast__exp_tN10Ast__exp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_T3N10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T3N10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   _fx_free_N10Ast__exp_t(&dst->t0);
   _fx_free_N10Ast__exp_t(&dst->t1);
   _fx_free_T2N10Ast__typ_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3N10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T3N10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* src,
   struct _fx_T3N10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3N10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_N10Ast__exp_t_data_t* t0,
   struct _fx_N10Ast__exp_t_data_t* t1,
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t* t2,
   struct _fx_T3N10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_T2N10Ast__exp_tR10Ast__loc_t(struct _fx_T2N10Ast__exp_tR10Ast__loc_t* dst)
{
   _fx_free_N10Ast__exp_t(&dst->t0);
}

static void _fx_copy_T2N10Ast__exp_tR10Ast__loc_t(
   struct _fx_T2N10Ast__exp_tR10Ast__loc_t* src,
   struct _fx_T2N10Ast__exp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2N10Ast__exp_tR10Ast__loc_t(
   struct _fx_N10Ast__exp_t_data_t* t0,
   struct _fx_R10Ast__loc_t* t1,
   struct _fx_T2N10Ast__exp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   fx_result->t1 = *t1;
}

static void _fx_free_T4N10Ast__exp_tN10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T4N10Ast__exp_tN10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   _fx_free_N10Ast__exp_t(&dst->t0);
   _fx_free_N10Ast__exp_t(&dst->t1);
   _fx_free_N10Ast__exp_t(&dst->t2);
   _fx_free_T2N10Ast__typ_tR10Ast__loc_t(&dst->t3);
}

static void _fx_copy_T4N10Ast__exp_tN10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T4N10Ast__exp_tN10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* src,
   struct _fx_T4N10Ast__exp_tN10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   FX_COPY_PTR(src->t2, &dst->t2);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(&src->t3, &dst->t3);
}

static void _fx_make_T4N10Ast__exp_tN10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_N10Ast__exp_t_data_t* t0,
   struct _fx_N10Ast__exp_t_data_t* t1,
   struct _fx_N10Ast__exp_t_data_t* t2,
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t* t3,
   struct _fx_T4N10Ast__exp_tN10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   FX_COPY_PTR(t2, &fx_result->t2);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(t3, &fx_result->t3);
}

static void _fx_free_T2N10Ast__pat_tN10Ast__exp_t(struct _fx_T2N10Ast__pat_tN10Ast__exp_t* dst)
{
   _fx_free_N10Ast__pat_t(&dst->t0);
   _fx_free_N10Ast__exp_t(&dst->t1);
}

static void _fx_copy_T2N10Ast__pat_tN10Ast__exp_t(
   struct _fx_T2N10Ast__pat_tN10Ast__exp_t* src,
   struct _fx_T2N10Ast__pat_tN10Ast__exp_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2N10Ast__pat_tN10Ast__exp_t(
   struct _fx_N10Ast__pat_t_data_t* t0,
   struct _fx_N10Ast__exp_t_data_t* t1,
   struct _fx_T2N10Ast__pat_tN10Ast__exp_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_LT2N10Ast__pat_tN10Ast__exp_t(struct _fx_LT2N10Ast__pat_tN10Ast__exp_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2N10Ast__pat_tN10Ast__exp_t, _fx_free_T2N10Ast__pat_tN10Ast__exp_t);
}

static int _fx_cons_LT2N10Ast__pat_tN10Ast__exp_t(
   struct _fx_T2N10Ast__pat_tN10Ast__exp_t* hd,
   struct _fx_LT2N10Ast__pat_tN10Ast__exp_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2N10Ast__pat_tN10Ast__exp_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2N10Ast__pat_tN10Ast__exp_t, _fx_copy_T2N10Ast__pat_tN10Ast__exp_t);
}

static void _fx_free_T5LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_tN10Ast__exp_tR16Ast__for_flags_tR10Ast__loc_t(
   struct _fx_T5LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_tN10Ast__exp_tR16Ast__for_flags_tR10Ast__loc_t* dst)
{
   _fx_free_LT2N10Ast__pat_tN10Ast__exp_t(&dst->t0);
   _fx_free_N10Ast__pat_t(&dst->t1);
   _fx_free_N10Ast__exp_t(&dst->t2);
}

static void _fx_copy_T5LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_tN10Ast__exp_tR16Ast__for_flags_tR10Ast__loc_t(
   struct _fx_T5LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_tN10Ast__exp_tR16Ast__for_flags_tR10Ast__loc_t* src,
   struct _fx_T5LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_tN10Ast__exp_tR16Ast__for_flags_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   FX_COPY_PTR(src->t2, &dst->t2);
   dst->t3 = src->t3;
   dst->t4 = src->t4;
}

static void _fx_make_T5LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_tN10Ast__exp_tR16Ast__for_flags_tR10Ast__loc_t(
   struct _fx_LT2N10Ast__pat_tN10Ast__exp_t_data_t* t0,
   struct _fx_N10Ast__pat_t_data_t* t1,
   struct _fx_N10Ast__exp_t_data_t* t2,
   struct _fx_R16Ast__for_flags_t* t3,
   struct _fx_R10Ast__loc_t* t4,
   struct _fx_T5LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_tN10Ast__exp_tR16Ast__for_flags_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   FX_COPY_PTR(t2, &fx_result->t2);
   fx_result->t3 = *t3;
   fx_result->t4 = *t4;
}

static void _fx_free_T2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t(struct _fx_T2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t* dst)
{
   _fx_free_LT2N10Ast__pat_tN10Ast__exp_t(&dst->t0);
   _fx_free_N10Ast__pat_t(&dst->t1);
}

static void _fx_copy_T2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t(
   struct _fx_T2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t* src,
   struct _fx_T2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t(
   struct _fx_LT2N10Ast__pat_tN10Ast__exp_t_data_t* t0,
   struct _fx_N10Ast__pat_t_data_t* t1,
   struct _fx_T2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t(
   struct _fx_LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t, _fx_free_T2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t);
}

static int _fx_cons_LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t(
   struct _fx_T2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t* hd,
   struct _fx_LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t, _fx_copy_T2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t);
}

static void
   _fx_free_T4LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_tN10Ast__exp_tR16Ast__for_flags_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T4LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_tN10Ast__exp_tR16Ast__for_flags_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   _fx_free_LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t(&dst->t0);
   _fx_free_N10Ast__exp_t(&dst->t1);
   _fx_free_T2N10Ast__typ_tR10Ast__loc_t(&dst->t3);
}

static void
   _fx_copy_T4LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_tN10Ast__exp_tR16Ast__for_flags_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T4LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_tN10Ast__exp_tR16Ast__for_flags_tT2N10Ast__typ_tR10Ast__loc_t* src,
   struct _fx_T4LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_tN10Ast__exp_tR16Ast__for_flags_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(&src->t3, &dst->t3);
}

static void
   _fx_make_T4LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_tN10Ast__exp_tR16Ast__for_flags_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_t_data_t* t0,
   struct _fx_N10Ast__exp_t_data_t* t1,
   struct _fx_R16Ast__for_flags_t* t2,
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t* t3,
   struct _fx_T4LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_tN10Ast__exp_tR16Ast__for_flags_tT2N10Ast__typ_tR10Ast__loc_t*
      fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(t3, &fx_result->t3);
}

static void _fx_free_T3N10Ast__exp_tLT2N10Ast__pat_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T3N10Ast__exp_tLT2N10Ast__pat_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   _fx_free_N10Ast__exp_t(&dst->t0);
   _fx_free_LT2N10Ast__pat_tN10Ast__exp_t(&dst->t1);
   _fx_free_T2N10Ast__typ_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3N10Ast__exp_tLT2N10Ast__pat_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T3N10Ast__exp_tLT2N10Ast__pat_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* src,
   struct _fx_T3N10Ast__exp_tLT2N10Ast__pat_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3N10Ast__exp_tLT2N10Ast__pat_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_N10Ast__exp_t_data_t* t0,
   struct _fx_LT2N10Ast__pat_tN10Ast__exp_t_data_t* t1,
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t* t2,
   struct _fx_T3N10Ast__exp_tLT2N10Ast__pat_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_T3N10Ast__exp_tN10Ast__typ_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T3N10Ast__exp_tN10Ast__typ_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   _fx_free_N10Ast__exp_t(&dst->t0);
   _fx_free_N10Ast__typ_t(&dst->t1);
   _fx_free_T2N10Ast__typ_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3N10Ast__exp_tN10Ast__typ_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T3N10Ast__exp_tN10Ast__typ_tT2N10Ast__typ_tR10Ast__loc_t* src,
   struct _fx_T3N10Ast__exp_tN10Ast__typ_tT2N10Ast__typ_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3N10Ast__exp_tN10Ast__typ_tT2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_N10Ast__exp_t_data_t* t0,
   struct _fx_N10Ast__typ_t_data_t* t1,
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t* t2,
   struct _fx_T3N10Ast__exp_tN10Ast__typ_tT2N10Ast__typ_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_T2ST2N10Ast__typ_tR10Ast__loc_t(struct _fx_T2ST2N10Ast__typ_tR10Ast__loc_t* dst)
{
   fx_free_str(&dst->t0);
   _fx_free_T2N10Ast__typ_tR10Ast__loc_t(&dst->t1);
}

static void _fx_copy_T2ST2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T2ST2N10Ast__typ_tR10Ast__loc_t* src,
   struct _fx_T2ST2N10Ast__typ_tR10Ast__loc_t* dst)
{
   fx_copy_str(&src->t0, &dst->t0);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(&src->t1, &dst->t1);
}

static void _fx_make_T2ST2N10Ast__typ_tR10Ast__loc_t(
   fx_str_t* t0,
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t* t1,
   struct _fx_T2ST2N10Ast__typ_tR10Ast__loc_t* fx_result)
{
   fx_copy_str(t0, &fx_result->t0);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(t1, &fx_result->t1);
}

static void _fx_free_T3SST2N10Ast__typ_tR10Ast__loc_t(struct _fx_T3SST2N10Ast__typ_tR10Ast__loc_t* dst)
{
   fx_free_str(&dst->t0);
   fx_free_str(&dst->t1);
   _fx_free_T2N10Ast__typ_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3SST2N10Ast__typ_tR10Ast__loc_t(
   struct _fx_T3SST2N10Ast__typ_tR10Ast__loc_t* src,
   struct _fx_T3SST2N10Ast__typ_tR10Ast__loc_t* dst)
{
   fx_copy_str(&src->t0, &dst->t0);
   fx_copy_str(&src->t1, &dst->t1);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3SST2N10Ast__typ_tR10Ast__loc_t(
   fx_str_t* t0,
   fx_str_t* t1,
   struct _fx_T2N10Ast__typ_tR10Ast__loc_t* t2,
   struct _fx_T3SST2N10Ast__typ_tR10Ast__loc_t* fx_result)
{
   fx_copy_str(t0, &fx_result->t0);
   fx_copy_str(t1, &fx_result->t1);
   _fx_copy_T2N10Ast__typ_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_T4N10Ast__pat_tN10Ast__exp_tR16Ast__val_flags_tR10Ast__loc_t(
   struct _fx_T4N10Ast__pat_tN10Ast__exp_tR16Ast__val_flags_tR10Ast__loc_t* dst)
{
   _fx_free_N10Ast__pat_t(&dst->t0);
   _fx_free_N10Ast__exp_t(&dst->t1);
   _fx_free_R16Ast__val_flags_t(&dst->t2);
}

static void _fx_copy_T4N10Ast__pat_tN10Ast__exp_tR16Ast__val_flags_tR10Ast__loc_t(
   struct _fx_T4N10Ast__pat_tN10Ast__exp_tR16Ast__val_flags_tR10Ast__loc_t* src,
   struct _fx_T4N10Ast__pat_tN10Ast__exp_tR16Ast__val_flags_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   _fx_copy_R16Ast__val_flags_t(&src->t2, &dst->t2);
   dst->t3 = src->t3;
}

static void _fx_make_T4N10Ast__pat_tN10Ast__exp_tR16Ast__val_flags_tR10Ast__loc_t(
   struct _fx_N10Ast__pat_t_data_t* t0,
   struct _fx_N10Ast__exp_t_data_t* t1,
   struct _fx_R16Ast__val_flags_t* t2,
   struct _fx_R10Ast__loc_t* t3,
   struct _fx_T4N10Ast__pat_tN10Ast__exp_tR16Ast__val_flags_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   _fx_copy_R16Ast__val_flags_t(t2, &fx_result->t2);
   fx_result->t3 = *t3;
}

static int _fx_cons_LT2iR9Ast__id_t(
   struct _fx_T2iR9Ast__id_t* hd,
   struct _fx_LT2iR9Ast__id_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2iR9Ast__id_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2iR9Ast__id_t, FX_COPY_SIMPLE_BY_PTR);
}

static void _fx_free_T2LT2iR9Ast__id_tR10Ast__loc_t(struct _fx_T2LT2iR9Ast__id_tR10Ast__loc_t* dst)
{
   fx_free_list_simple(&dst->t0);
}

static void _fx_copy_T2LT2iR9Ast__id_tR10Ast__loc_t(
   struct _fx_T2LT2iR9Ast__id_tR10Ast__loc_t* src,
   struct _fx_T2LT2iR9Ast__id_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2LT2iR9Ast__id_tR10Ast__loc_t(
   struct _fx_LT2iR9Ast__id_t_data_t* t0,
   struct _fx_R10Ast__loc_t* t1,
   struct _fx_T2LT2iR9Ast__id_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   fx_result->t1 = *t1;
}

static void _fx_free_T3iLR9Ast__id_tR10Ast__loc_t(struct _fx_T3iLR9Ast__id_tR10Ast__loc_t* dst)
{
   fx_free_list_simple(&dst->t1);
}

static void _fx_copy_T3iLR9Ast__id_tR10Ast__loc_t(
   struct _fx_T3iLR9Ast__id_tR10Ast__loc_t* src,
   struct _fx_T3iLR9Ast__id_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3iLR9Ast__id_tR10Ast__loc_t(
   int_ t0,
   struct _fx_LR9Ast__id_t_data_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3iLR9Ast__id_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = t0;
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_T2LSR10Ast__loc_t(struct _fx_T2LSR10Ast__loc_t* dst)
{
   _fx_free_LS(&dst->t0);
}

static void _fx_copy_T2LSR10Ast__loc_t(struct _fx_T2LSR10Ast__loc_t* src, struct _fx_T2LSR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2LSR10Ast__loc_t(
   struct _fx_LS_data_t* t0,
   struct _fx_R10Ast__loc_t* t1,
   struct _fx_T2LSR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   fx_result->t1 = *t1;
}

static void _fx_free_N10Ast__exp_t(struct _fx_N10Ast__exp_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      switch ((*dst)->tag) {
      case 4:
         _fx_free_T2Nt6option1N10Ast__exp_tR10Ast__loc_t(&(*dst)->u.ExpReturn); break;
      case 5:
         _fx_free_T4Nt6option1N10Ast__exp_tNt6option1N10Ast__exp_tNt6option1N10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
            &(*dst)->u.ExpRange);
         break;
      case 6:
         _fx_free_T2N10Ast__lit_tT2N10Ast__typ_tR10Ast__loc_t(&(*dst)->u.ExpLit); break;
      case 7:
         _fx_free_T2R9Ast__id_tT2N10Ast__typ_tR10Ast__loc_t(&(*dst)->u.ExpIdent); break;
      case 8:
         _fx_free_T4N13Ast__binary_tN10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(&(*dst)->u.ExpBinary); break;
      case 9:
         _fx_free_T3N12Ast__unary_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(&(*dst)->u.ExpUnary); break;
      case 10:
         _fx_free_T3N13Ast__intrin_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(&(*dst)->u.ExpIntrin); break;
      case 11:
         _fx_free_T2R9Ast__id_tN10Ast__exp_t(&(*dst)->u.ExpSync); break;
      case 12:
         _fx_free_T2LN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(&(*dst)->u.ExpSeq); break;
      case 13:
         _fx_free_T2LN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(&(*dst)->u.ExpMkTuple); break;
      case 14:
         _fx_free_T2LLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(&(*dst)->u.ExpMkArray); break;
      case 15:
         _fx_free_T2LN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(&(*dst)->u.ExpMkVector); break;
      case 16:
         _fx_free_T3N10Ast__exp_tLT2R9Ast__id_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(&(*dst)->u.ExpMkRecord); break;
      case 17:
         _fx_free_T3N10Ast__exp_tLT2R9Ast__id_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(&(*dst)->u.ExpUpdateRecord); break;
      case 18:
         _fx_free_T3N10Ast__exp_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(&(*dst)->u.ExpCall); break;
      case 19:
         _fx_free_T5N10Ast__exp_tN13Ast__border_tN18Ast__interpolate_tLN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(
            &(*dst)->u.ExpAt);
         break;
      case 20:
         _fx_free_T3N10Ast__exp_tN10Ast__exp_tR10Ast__loc_t(&(*dst)->u.ExpAssign); break;
      case 21:
         _fx_free_T3N10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(&(*dst)->u.ExpMem); break;
      case 22:
         _fx_free_T2N10Ast__exp_tR10Ast__loc_t(&(*dst)->u.ExpThrow); break;
      case 23:
         _fx_free_T4N10Ast__exp_tN10Ast__exp_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(&(*dst)->u.ExpIf); break;
      case 24:
         _fx_free_T3N10Ast__exp_tN10Ast__exp_tR10Ast__loc_t(&(*dst)->u.ExpWhile); break;
      case 25:
         _fx_free_T3N10Ast__exp_tN10Ast__exp_tR10Ast__loc_t(&(*dst)->u.ExpDoWhile); break;
      case 26:
         _fx_free_T5LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_tN10Ast__exp_tR16Ast__for_flags_tR10Ast__loc_t(&(*dst)->u.ExpFor);
         break;
      case 27:
         _fx_free_T4LT2LT2N10Ast__pat_tN10Ast__exp_tN10Ast__pat_tN10Ast__exp_tR16Ast__for_flags_tT2N10Ast__typ_tR10Ast__loc_t(
            &(*dst)->u.ExpMap);
         break;
      case 28:
         _fx_free_T3N10Ast__exp_tLT2N10Ast__pat_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(&(*dst)->u.ExpTryCatch); break;
      case 29:
         _fx_free_T3N10Ast__exp_tLT2N10Ast__pat_tN10Ast__exp_tT2N10Ast__typ_tR10Ast__loc_t(&(*dst)->u.ExpMatch); break;
      case 30:
         _fx_free_T3N10Ast__exp_tN10Ast__typ_tT2N10Ast__typ_tR10Ast__loc_t(&(*dst)->u.ExpCast); break;
      case 31:
         _fx_free_T3N10Ast__exp_tN10Ast__typ_tT2N10Ast__typ_tR10Ast__loc_t(&(*dst)->u.ExpTyped); break;
      case 32:
         _fx_free_T2ST2N10Ast__typ_tR10Ast__loc_t(&(*dst)->u.ExpCCode); break;
      case 33:
         _fx_free_T3SST2N10Ast__typ_tR10Ast__loc_t(&(*dst)->u.ExpData); break;
      case 34:
         _fx_free_T4N10Ast__pat_tN10Ast__exp_tR16Ast__val_flags_tR10Ast__loc_t(&(*dst)->u.DefVal); break;
      case 35:
         _fx_free_rR13Ast__deffun_t(&(*dst)->u.DefFun); break;
      case 36:
         _fx_free_rR13Ast__defexn_t(&(*dst)->u.DefExn); break;
      case 37:
         _fx_free_rR13Ast__deftyp_t(&(*dst)->u.DefTyp); break;
      case 38:
         _fx_free_rR17Ast__defvariant_t(&(*dst)->u.DefVariant); break;
      case 39:
         _fx_free_rR19Ast__definterface_t(&(*dst)->u.DefInterface); break;
      case 40:
         _fx_free_T2LT2iR9Ast__id_tR10Ast__loc_t(&(*dst)->u.DirImport); break;
      case 41:
         _fx_free_T3iLR9Ast__id_tR10Ast__loc_t(&(*dst)->u.DirImportFrom); break;
      case 42:
         _fx_free_T2LSR10Ast__loc_t(&(*dst)->u.DirPragma); break;
      default:
         ;
      }
      fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_T2N10Ast__lit_tR10Ast__loc_t(struct _fx_T2N10Ast__lit_tR10Ast__loc_t* dst)
{
   _fx_free_N10Ast__lit_t(&dst->t0);
}

static void _fx_copy_T2N10Ast__lit_tR10Ast__loc_t(
   struct _fx_T2N10Ast__lit_tR10Ast__loc_t* src,
   struct _fx_T2N10Ast__lit_tR10Ast__loc_t* dst)
{
   _fx_copy_N10Ast__lit_t(&src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2N10Ast__lit_tR10Ast__loc_t(
   struct _fx_N10Ast__lit_t* t0,
   struct _fx_R10Ast__loc_t* t1,
   struct _fx_T2N10Ast__lit_tR10Ast__loc_t* fx_result)
{
   _fx_copy_N10Ast__lit_t(t0, &fx_result->t0);
   fx_result->t1 = *t1;
}

static void _fx_free_T2LN10Ast__pat_tR10Ast__loc_t(struct _fx_T2LN10Ast__pat_tR10Ast__loc_t* dst)
{
   _fx_free_LN10Ast__pat_t(&dst->t0);
}

static void _fx_copy_T2LN10Ast__pat_tR10Ast__loc_t(
   struct _fx_T2LN10Ast__pat_tR10Ast__loc_t* src,
   struct _fx_T2LN10Ast__pat_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2LN10Ast__pat_tR10Ast__loc_t(
   struct _fx_LN10Ast__pat_t_data_t* t0,
   struct _fx_R10Ast__loc_t* t1,
   struct _fx_T2LN10Ast__pat_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   fx_result->t1 = *t1;
}

static void _fx_free_T3R9Ast__id_tLN10Ast__pat_tR10Ast__loc_t(struct _fx_T3R9Ast__id_tLN10Ast__pat_tR10Ast__loc_t* dst)
{
   _fx_free_LN10Ast__pat_t(&dst->t1);
}

static void _fx_copy_T3R9Ast__id_tLN10Ast__pat_tR10Ast__loc_t(
   struct _fx_T3R9Ast__id_tLN10Ast__pat_tR10Ast__loc_t* src,
   struct _fx_T3R9Ast__id_tLN10Ast__pat_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3R9Ast__id_tLN10Ast__pat_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_LN10Ast__pat_t_data_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3R9Ast__id_tLN10Ast__pat_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_T2R9Ast__id_tN10Ast__pat_t(struct _fx_T2R9Ast__id_tN10Ast__pat_t* dst)
{
   _fx_free_N10Ast__pat_t(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tN10Ast__pat_t(
   struct _fx_T2R9Ast__id_tN10Ast__pat_t* src,
   struct _fx_T2R9Ast__id_tN10Ast__pat_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tN10Ast__pat_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_N10Ast__pat_t_data_t* t1,
   struct _fx_T2R9Ast__id_tN10Ast__pat_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_LT2R9Ast__id_tN10Ast__pat_t(struct _fx_LT2R9Ast__id_tN10Ast__pat_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2R9Ast__id_tN10Ast__pat_t, _fx_free_T2R9Ast__id_tN10Ast__pat_t);
}

static int _fx_cons_LT2R9Ast__id_tN10Ast__pat_t(
   struct _fx_T2R9Ast__id_tN10Ast__pat_t* hd,
   struct _fx_LT2R9Ast__id_tN10Ast__pat_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2R9Ast__id_tN10Ast__pat_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2R9Ast__id_tN10Ast__pat_t, _fx_copy_T2R9Ast__id_tN10Ast__pat_t);
}

static void _fx_free_T3Nt6option1R9Ast__id_tLT2R9Ast__id_tN10Ast__pat_tR10Ast__loc_t(
   struct _fx_T3Nt6option1R9Ast__id_tLT2R9Ast__id_tN10Ast__pat_tR10Ast__loc_t* dst)
{
   _fx_free_LT2R9Ast__id_tN10Ast__pat_t(&dst->t1);
}

static void _fx_copy_T3Nt6option1R9Ast__id_tLT2R9Ast__id_tN10Ast__pat_tR10Ast__loc_t(
   struct _fx_T3Nt6option1R9Ast__id_tLT2R9Ast__id_tN10Ast__pat_tR10Ast__loc_t* src,
   struct _fx_T3Nt6option1R9Ast__id_tLT2R9Ast__id_tN10Ast__pat_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3Nt6option1R9Ast__id_tLT2R9Ast__id_tN10Ast__pat_tR10Ast__loc_t(
   struct _fx_Nt6option1R9Ast__id_t* t0,
   struct _fx_LT2R9Ast__id_tN10Ast__pat_t_data_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3Nt6option1R9Ast__id_tLT2R9Ast__id_tN10Ast__pat_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_T3N10Ast__pat_tN10Ast__pat_tR10Ast__loc_t(struct _fx_T3N10Ast__pat_tN10Ast__pat_tR10Ast__loc_t* dst)
{
   _fx_free_N10Ast__pat_t(&dst->t0);
   _fx_free_N10Ast__pat_t(&dst->t1);
}

static void _fx_copy_T3N10Ast__pat_tN10Ast__pat_tR10Ast__loc_t(
   struct _fx_T3N10Ast__pat_tN10Ast__pat_tR10Ast__loc_t* src,
   struct _fx_T3N10Ast__pat_tN10Ast__pat_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3N10Ast__pat_tN10Ast__pat_tR10Ast__loc_t(
   struct _fx_N10Ast__pat_t_data_t* t0,
   struct _fx_N10Ast__pat_t_data_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3N10Ast__pat_tN10Ast__pat_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_T3N10Ast__pat_tR9Ast__id_tR10Ast__loc_t(struct _fx_T3N10Ast__pat_tR9Ast__id_tR10Ast__loc_t* dst)
{
   _fx_free_N10Ast__pat_t(&dst->t0);
}

static void _fx_copy_T3N10Ast__pat_tR9Ast__id_tR10Ast__loc_t(
   struct _fx_T3N10Ast__pat_tR9Ast__id_tR10Ast__loc_t* src,
   struct _fx_T3N10Ast__pat_tR9Ast__id_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   dst->t1 = src->t1;
   dst->t2 = src->t2;
}

static void _fx_make_T3N10Ast__pat_tR9Ast__id_tR10Ast__loc_t(
   struct _fx_N10Ast__pat_t_data_t* t0,
   struct _fx_R9Ast__id_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3N10Ast__pat_tR9Ast__id_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   fx_result->t1 = *t1;
   fx_result->t2 = *t2;
}

static void _fx_free_T3N10Ast__pat_tN10Ast__typ_tR10Ast__loc_t(struct _fx_T3N10Ast__pat_tN10Ast__typ_tR10Ast__loc_t* dst)
{
   _fx_free_N10Ast__pat_t(&dst->t0);
   _fx_free_N10Ast__typ_t(&dst->t1);
}

static void _fx_copy_T3N10Ast__pat_tN10Ast__typ_tR10Ast__loc_t(
   struct _fx_T3N10Ast__pat_tN10Ast__typ_tR10Ast__loc_t* src,
   struct _fx_T3N10Ast__pat_tN10Ast__typ_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3N10Ast__pat_tN10Ast__typ_tR10Ast__loc_t(
   struct _fx_N10Ast__pat_t_data_t* t0,
   struct _fx_N10Ast__typ_t_data_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3N10Ast__pat_tN10Ast__typ_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_T3N10Ast__pat_tN10Ast__exp_tR10Ast__loc_t(struct _fx_T3N10Ast__pat_tN10Ast__exp_tR10Ast__loc_t* dst)
{
   _fx_free_N10Ast__pat_t(&dst->t0);
   _fx_free_N10Ast__exp_t(&dst->t1);
}

static void _fx_copy_T3N10Ast__pat_tN10Ast__exp_tR10Ast__loc_t(
   struct _fx_T3N10Ast__pat_tN10Ast__exp_tR10Ast__loc_t* src,
   struct _fx_T3N10Ast__pat_tN10Ast__exp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3N10Ast__pat_tN10Ast__exp_tR10Ast__loc_t(
   struct _fx_N10Ast__pat_t_data_t* t0,
   struct _fx_N10Ast__exp_t_data_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3N10Ast__pat_tN10Ast__exp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_T2N10Ast__pat_tR10Ast__loc_t(struct _fx_T2N10Ast__pat_tR10Ast__loc_t* dst)
{
   _fx_free_N10Ast__pat_t(&dst->t0);
}

static void _fx_copy_T2N10Ast__pat_tR10Ast__loc_t(
   struct _fx_T2N10Ast__pat_tR10Ast__loc_t* src,
   struct _fx_T2N10Ast__pat_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2N10Ast__pat_tR10Ast__loc_t(
   struct _fx_N10Ast__pat_t_data_t* t0,
   struct _fx_R10Ast__loc_t* t1,
   struct _fx_T2N10Ast__pat_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   fx_result->t1 = *t1;
}

static void _fx_free_N10Ast__pat_t(struct _fx_N10Ast__pat_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      switch ((*dst)->tag) {
      case 2:
         _fx_free_T2N10Ast__lit_tR10Ast__loc_t(&(*dst)->u.PatLit); break;
      case 4:
         _fx_free_T2LN10Ast__pat_tR10Ast__loc_t(&(*dst)->u.PatTuple); break;
      case 5:
         _fx_free_T3R9Ast__id_tLN10Ast__pat_tR10Ast__loc_t(&(*dst)->u.PatVariant); break;
      case 6:
         _fx_free_T3Nt6option1R9Ast__id_tLT2R9Ast__id_tN10Ast__pat_tR10Ast__loc_t(&(*dst)->u.PatRecord); break;
      case 7:
         _fx_free_T3N10Ast__pat_tN10Ast__pat_tR10Ast__loc_t(&(*dst)->u.PatCons); break;
      case 8:
         _fx_free_T3N10Ast__pat_tR9Ast__id_tR10Ast__loc_t(&(*dst)->u.PatAs); break;
      case 9:
         _fx_free_T3N10Ast__pat_tN10Ast__typ_tR10Ast__loc_t(&(*dst)->u.PatTyped); break;
      case 10:
         _fx_free_T3N10Ast__pat_tN10Ast__exp_tR10Ast__loc_t(&(*dst)->u.PatWhen); break;
      case 11:
         _fx_free_T2LN10Ast__pat_tR10Ast__loc_t(&(*dst)->u.PatAlt); break;
      case 12:
         _fx_free_T2N10Ast__pat_tR10Ast__loc_t(&(*dst)->u.PatRef); break;
      default:
         ;
      }
      fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_N16Ast__env_entry_t(struct _fx_N16Ast__env_entry_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      switch ((*dst)->tag) { case 2:     _fx_free_N10Ast__typ_t(&(*dst)->u.EnvTyp); break; default:    ; } fx_free(*dst);
   }
   *dst = 0;
}

static int _fx_cons_Li(int_ hd, struct _fx_Li_data_t* tl, bool addref_tl, struct _fx_Li_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_Li, FX_COPY_SIMPLE);
}

static void _fx_free_T10R9Ast__id_tSiBLN10Ast__exp_tLiRt6Map__t2R9Ast__id_tLN16Ast__env_entry_tBiNt9Dynvec__t1N14Ast__id_info_t(
   struct _fx_T10R9Ast__id_tSiBLN10Ast__exp_tLiRt6Map__t2R9Ast__id_tLN16Ast__env_entry_tBiNt9Dynvec__t1N14Ast__id_info_t* dst)
{
   fx_free_str(&dst->t1);
   _fx_free_LN10Ast__exp_t(&dst->t4);
   fx_free_list_simple(&dst->t5);
   _fx_free_Rt6Map__t2R9Ast__id_tLN16Ast__env_entry_t(&dst->t6);
   _fx_free_Nt9Dynvec__t1N14Ast__id_info_t(&dst->t9);
}

static void _fx_copy_T10R9Ast__id_tSiBLN10Ast__exp_tLiRt6Map__t2R9Ast__id_tLN16Ast__env_entry_tBiNt9Dynvec__t1N14Ast__id_info_t(
   struct _fx_T10R9Ast__id_tSiBLN10Ast__exp_tLiRt6Map__t2R9Ast__id_tLN16Ast__env_entry_tBiNt9Dynvec__t1N14Ast__id_info_t* src,
   struct _fx_T10R9Ast__id_tSiBLN10Ast__exp_tLiRt6Map__t2R9Ast__id_tLN16Ast__env_entry_tBiNt9Dynvec__t1N14Ast__id_info_t* dst)
{
   dst->t0 = src->t0;
   fx_copy_str(&src->t1, &dst->t1);
   dst->t2 = src->t2;
   dst->t3 = src->t3;
   FX_COPY_PTR(src->t4, &dst->t4);
   FX_COPY_PTR(src->t5, &dst->t5);
   _fx_copy_Rt6Map__t2R9Ast__id_tLN16Ast__env_entry_t(&src->t6, &dst->t6);
   dst->t7 = src->t7;
   dst->t8 = src->t8;
   FX_COPY_PTR(src->t9, &dst->t9);
}

static void _fx_make_T10R9Ast__id_tSiBLN10Ast__exp_tLiRt6Map__t2R9Ast__id_tLN16Ast__env_entry_tBiNt9Dynvec__t1N14Ast__id_info_t(
   struct _fx_R9Ast__id_t* t0,
   fx_str_t* t1,
   int_ t2,
   bool t3,
   struct _fx_LN10Ast__exp_t_data_t* t4,
   struct _fx_Li_data_t* t5,
   struct _fx_Rt6Map__t2R9Ast__id_tLN16Ast__env_entry_t* t6,
   bool t7,
   int_ t8,
   struct _fx_Nt9Dynvec__t1N14Ast__id_info_t_data_t* t9,
   struct _fx_T10R9Ast__id_tSiBLN10Ast__exp_tLiRt6Map__t2R9Ast__id_tLN16Ast__env_entry_tBiNt9Dynvec__t1N14Ast__id_info_t*
      fx_result)
{
   fx_result->t0 = *t0;
   fx_copy_str(t1, &fx_result->t1);
   fx_result->t2 = t2;
   fx_result->t3 = t3;
   FX_COPY_PTR(t4, &fx_result->t4);
   FX_COPY_PTR(t5, &fx_result->t5);
   _fx_copy_Rt6Map__t2R9Ast__id_tLN16Ast__env_entry_t(t6, &fx_result->t6);
   fx_result->t7 = t7;
   fx_result->t8 = t8;
   FX_COPY_PTR(t9, &fx_result->t9);
}

static void _fx_free_N16Ast__defmodule_t(struct _fx_N16Ast__defmodule_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      _fx_free_T10R9Ast__id_tSiBLN10Ast__exp_tLiRt6Map__t2R9Ast__id_tLN16Ast__env_entry_tBiNt9Dynvec__t1N14Ast__id_info_t(
         &(*dst)->u.defmodule_t);
      fx_free(*dst);
   }
   *dst = 0;
}

static int _fx_cons_LR10Ast__loc_t(
   struct _fx_R10Ast__loc_t* hd,
   struct _fx_LR10Ast__loc_t_data_t* tl,
   bool addref_tl,
   struct _fx_LR10Ast__loc_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LR10Ast__loc_t, FX_COPY_SIMPLE_BY_PTR);
}

static void _fx_free_N14K_form__klit_t(struct _fx_N14K_form__klit_t* dst)
{
   switch (dst->tag) {
   case 5:
      fx_free_str(&dst->u.KLitString); break;
   case 8:
      _fx_free_N14K_form__ktyp_t(&dst->u.KLitNil); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_N14K_form__klit_t(struct _fx_N14K_form__klit_t* src, struct _fx_N14K_form__klit_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 5:
      fx_copy_str(&src->u.KLitString, &dst->u.KLitString); break;
   case 8:
      FX_COPY_PTR(src->u.KLitNil, &dst->u.KLitNil); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_N14K_form__atom_t(struct _fx_N14K_form__atom_t* dst)
{
   switch (dst->tag) {
   case 2:
      _fx_free_N14K_form__klit_t(&dst->u.AtomLit); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_N14K_form__atom_t(struct _fx_N14K_form__atom_t* src, struct _fx_N14K_form__atom_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 2:
      _fx_copy_N14K_form__klit_t(&src->u.AtomLit, &dst->u.AtomLit); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_Nt6option1N14K_form__atom_t(struct _fx_Nt6option1N14K_form__atom_t* dst)
{
   switch (dst->tag) {
   case 2:
      _fx_free_N14K_form__atom_t(&dst->u.Some); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_Nt6option1N14K_form__atom_t(
   struct _fx_Nt6option1N14K_form__atom_t* src,
   struct _fx_Nt6option1N14K_form__atom_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 2:
      _fx_copy_N14K_form__atom_t(&src->u.Some, &dst->u.Some); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_LN14K_form__kexp_t(struct _fx_LN14K_form__kexp_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LN14K_form__kexp_t, _fx_free_N14K_form__kexp_t);
}

static int _fx_cons_LN14K_form__kexp_t(
   struct _fx_N14K_form__kexp_t_data_t* hd,
   struct _fx_LN14K_form__kexp_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN14K_form__kexp_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN14K_form__kexp_t, FX_COPY_PTR);
}

static void _fx_free_T2BN14K_form__atom_t(struct _fx_T2BN14K_form__atom_t* dst)
{
   _fx_free_N14K_form__atom_t(&dst->t1);
}

static void _fx_copy_T2BN14K_form__atom_t(struct _fx_T2BN14K_form__atom_t* src, struct _fx_T2BN14K_form__atom_t* dst)
{
   dst->t0 = src->t0;
   _fx_copy_N14K_form__atom_t(&src->t1, &dst->t1);
}

static void _fx_make_T2BN14K_form__atom_t(bool t0, struct _fx_N14K_form__atom_t* t1, struct _fx_T2BN14K_form__atom_t* fx_result)
{
   fx_result->t0 = t0;
   _fx_copy_N14K_form__atom_t(t1, &fx_result->t1);
}

static void _fx_free_LT2BN14K_form__atom_t(struct _fx_LT2BN14K_form__atom_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2BN14K_form__atom_t, _fx_free_T2BN14K_form__atom_t);
}

static int _fx_cons_LT2BN14K_form__atom_t(
   struct _fx_T2BN14K_form__atom_t* hd,
   struct _fx_LT2BN14K_form__atom_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2BN14K_form__atom_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2BN14K_form__atom_t, _fx_copy_T2BN14K_form__atom_t);
}

static void _fx_free_T2LN14K_form__ktyp_tN14K_form__ktyp_t(struct _fx_T2LN14K_form__ktyp_tN14K_form__ktyp_t* dst)
{
   _fx_free_LN14K_form__ktyp_t(&dst->t0);
   _fx_free_N14K_form__ktyp_t(&dst->t1);
}

static void _fx_copy_T2LN14K_form__ktyp_tN14K_form__ktyp_t(
   struct _fx_T2LN14K_form__ktyp_tN14K_form__ktyp_t* src,
   struct _fx_T2LN14K_form__ktyp_tN14K_form__ktyp_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2LN14K_form__ktyp_tN14K_form__ktyp_t(
   struct _fx_LN14K_form__ktyp_t_data_t* t0,
   struct _fx_N14K_form__ktyp_t_data_t* t1,
   struct _fx_T2LN14K_form__ktyp_tN14K_form__ktyp_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t(struct _fx_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t* dst)
{
   _fx_free_LT2R9Ast__id_tN14K_form__ktyp_t(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t(
   struct _fx_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t* src,
   struct _fx_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* t1,
   struct _fx_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_T2iN14K_form__ktyp_t(struct _fx_T2iN14K_form__ktyp_t* dst)
{
   _fx_free_N14K_form__ktyp_t(&dst->t1);
}

static void _fx_copy_T2iN14K_form__ktyp_t(struct _fx_T2iN14K_form__ktyp_t* src, struct _fx_T2iN14K_form__ktyp_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2iN14K_form__ktyp_t(
   int_ t0,
   struct _fx_N14K_form__ktyp_t_data_t* t1,
   struct _fx_T2iN14K_form__ktyp_t* fx_result)
{
   fx_result->t0 = t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_N14K_form__ktyp_t(struct _fx_N14K_form__ktyp_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      switch ((*dst)->tag) {
      case 12:
         _fx_free_N14K_form__ktyp_t(&(*dst)->u.KTypRawPointer); break;
      case 13:
         _fx_free_T2LN14K_form__ktyp_tN14K_form__ktyp_t(&(*dst)->u.KTypFun); break;
      case 14:
         _fx_free_LN14K_form__ktyp_t(&(*dst)->u.KTypTuple); break;
      case 15:
         _fx_free_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t(&(*dst)->u.KTypRecord); break;
      case 17:
         _fx_free_T2iN14K_form__ktyp_t(&(*dst)->u.KTypArray); break;
      case 18:
         _fx_free_N14K_form__ktyp_t(&(*dst)->u.KTypVector); break;
      case 19:
         _fx_free_N14K_form__ktyp_t(&(*dst)->u.KTypList); break;
      case 20:
         _fx_free_N14K_form__ktyp_t(&(*dst)->u.KTypRef); break;
      default:
         ;
      }
      fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_Ta3N14K_form__atom_t(struct _fx_Ta3N14K_form__atom_t* dst)
{
   _fx_free_N14K_form__atom_t(&dst->t0);
   _fx_free_N14K_form__atom_t(&dst->t1);
   _fx_free_N14K_form__atom_t(&dst->t2);
}

static void _fx_copy_Ta3N14K_form__atom_t(struct _fx_Ta3N14K_form__atom_t* src, struct _fx_Ta3N14K_form__atom_t* dst)
{
   _fx_copy_N14K_form__atom_t(&src->t0, &dst->t0);
   _fx_copy_N14K_form__atom_t(&src->t1, &dst->t1);
   _fx_copy_N14K_form__atom_t(&src->t2, &dst->t2);
}

static void _fx_make_Ta3N14K_form__atom_t(
   struct _fx_N14K_form__atom_t* t0,
   struct _fx_N14K_form__atom_t* t1,
   struct _fx_N14K_form__atom_t* t2,
   struct _fx_Ta3N14K_form__atom_t* fx_result)
{
   _fx_copy_N14K_form__atom_t(t0, &fx_result->t0);
   _fx_copy_N14K_form__atom_t(t1, &fx_result->t1);
   _fx_copy_N14K_form__atom_t(t2, &fx_result->t2);
}

static void _fx_free_N13K_form__dom_t(struct _fx_N13K_form__dom_t* dst)
{
   switch (dst->tag) {
   case 1:
      _fx_free_N14K_form__atom_t(&dst->u.DomainElem); break;
   case 2:
      _fx_free_N14K_form__atom_t(&dst->u.DomainFast); break;
   case 3:
      _fx_free_Ta3N14K_form__atom_t(&dst->u.DomainRange); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_N13K_form__dom_t(struct _fx_N13K_form__dom_t* src, struct _fx_N13K_form__dom_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 1:
      _fx_copy_N14K_form__atom_t(&src->u.DomainElem, &dst->u.DomainElem); break;
   case 2:
      _fx_copy_N14K_form__atom_t(&src->u.DomainFast, &dst->u.DomainFast); break;
   case 3:
      _fx_copy_Ta3N14K_form__atom_t(&src->u.DomainRange, &dst->u.DomainRange); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_T2Nt6option1N14K_form__atom_tR10Ast__loc_t(struct _fx_T2Nt6option1N14K_form__atom_tR10Ast__loc_t* dst)
{
   _fx_free_Nt6option1N14K_form__atom_t(&dst->t0);
}

static void _fx_copy_T2Nt6option1N14K_form__atom_tR10Ast__loc_t(
   struct _fx_T2Nt6option1N14K_form__atom_tR10Ast__loc_t* src,
   struct _fx_T2Nt6option1N14K_form__atom_tR10Ast__loc_t* dst)
{
   _fx_copy_Nt6option1N14K_form__atom_t(&src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2Nt6option1N14K_form__atom_tR10Ast__loc_t(
   struct _fx_Nt6option1N14K_form__atom_t* t0,
   struct _fx_R10Ast__loc_t* t1,
   struct _fx_T2Nt6option1N14K_form__atom_tR10Ast__loc_t* fx_result)
{
   _fx_copy_Nt6option1N14K_form__atom_t(t0, &fx_result->t0);
   fx_result->t1 = *t1;
}

static void _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14K_form__ktyp_t(&dst->t0);
}

static void _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_N14K_form__ktyp_t_data_t* t0,
   struct _fx_R10Ast__loc_t* t1,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   fx_result->t1 = *t1;
}

static void _fx_free_T2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14K_form__atom_t(&dst->t0);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t1);
}

static void _fx_copy_T2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_copy_N14K_form__atom_t(&src->t0, &dst->t0);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t1, &dst->t1);
}

static void _fx_make_T2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_N14K_form__atom_t* t0,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t1,
   struct _fx_T2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   _fx_copy_N14K_form__atom_t(t0, &fx_result->t0);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t1, &fx_result->t1);
}

static void _fx_free_T4N13Ast__binary_tN14K_form__atom_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T4N13Ast__binary_tN14K_form__atom_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_N13Ast__binary_t(&dst->t0);
   _fx_free_N14K_form__atom_t(&dst->t1);
   _fx_free_N14K_form__atom_t(&dst->t2);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t3);
}

static void _fx_copy_T4N13Ast__binary_tN14K_form__atom_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T4N13Ast__binary_tN14K_form__atom_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T4N13Ast__binary_tN14K_form__atom_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   _fx_copy_N14K_form__atom_t(&src->t1, &dst->t1);
   _fx_copy_N14K_form__atom_t(&src->t2, &dst->t2);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t3, &dst->t3);
}

static void _fx_make_T4N13Ast__binary_tN14K_form__atom_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_N13Ast__binary_t_data_t* t0,
   struct _fx_N14K_form__atom_t* t1,
   struct _fx_N14K_form__atom_t* t2,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t3,
   struct _fx_T4N13Ast__binary_tN14K_form__atom_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   _fx_copy_N14K_form__atom_t(t1, &fx_result->t1);
   _fx_copy_N14K_form__atom_t(t2, &fx_result->t2);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t3, &fx_result->t3);
}

static void _fx_free_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14K_form__atom_t(&dst->t1);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   _fx_copy_N14K_form__atom_t(&src->t1, &dst->t1);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_N12Ast__unary_t* t0,
   struct _fx_N14K_form__atom_t* t1,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t2,
   struct _fx_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   _fx_copy_N14K_form__atom_t(t1, &fx_result->t1);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_LN14K_form__atom_t(struct _fx_LN14K_form__atom_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LN14K_form__atom_t, _fx_free_N14K_form__atom_t);
}

static int _fx_cons_LN14K_form__atom_t(
   struct _fx_N14K_form__atom_t* hd,
   struct _fx_LN14K_form__atom_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN14K_form__atom_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN14K_form__atom_t, _fx_copy_N14K_form__atom_t);
}

static void _fx_free_T3N13Ast__intrin_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3N13Ast__intrin_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_LN14K_form__atom_t(&dst->t1);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3N13Ast__intrin_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3N13Ast__intrin_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T3N13Ast__intrin_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3N13Ast__intrin_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_N13Ast__intrin_t* t0,
   struct _fx_LN14K_form__atom_t_data_t* t1,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t2,
   struct _fx_T3N13Ast__intrin_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_T2R9Ast__id_tN14K_form__kexp_t(struct _fx_T2R9Ast__id_tN14K_form__kexp_t* dst)
{
   _fx_free_N14K_form__kexp_t(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tN14K_form__kexp_t(
   struct _fx_T2R9Ast__id_tN14K_form__kexp_t* src,
   struct _fx_T2R9Ast__id_tN14K_form__kexp_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tN14K_form__kexp_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_N14K_form__kexp_t_data_t* t1,
   struct _fx_T2R9Ast__id_tN14K_form__kexp_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_T2LN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T2LN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_LN14K_form__kexp_t(&dst->t0);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t1);
}

static void _fx_copy_T2LN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T2LN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T2LN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t1, &dst->t1);
}

static void _fx_make_T2LN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_LN14K_form__kexp_t_data_t* t0,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t1,
   struct _fx_T2LN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t1, &fx_result->t1);
}

static void _fx_free_T4N14K_form__kexp_tN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T4N14K_form__kexp_tN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14K_form__kexp_t(&dst->t0);
   _fx_free_N14K_form__kexp_t(&dst->t1);
   _fx_free_N14K_form__kexp_t(&dst->t2);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t3);
}

static void _fx_copy_T4N14K_form__kexp_tN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T4N14K_form__kexp_tN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T4N14K_form__kexp_tN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   FX_COPY_PTR(src->t2, &dst->t2);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t3, &dst->t3);
}

static void _fx_make_T4N14K_form__kexp_tN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_N14K_form__kexp_t_data_t* t0,
   struct _fx_N14K_form__kexp_t_data_t* t1,
   struct _fx_N14K_form__kexp_t_data_t* t2,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t3,
   struct _fx_T4N14K_form__kexp_tN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   FX_COPY_PTR(t2, &fx_result->t2);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t3, &fx_result->t3);
}

static void _fx_free_T3R9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3R9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_LN14K_form__atom_t(&dst->t1);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3R9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3R9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T3R9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3R9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_LN14K_form__atom_t_data_t* t1,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t2,
   struct _fx_T3R9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_T4R9Ast__id_tiLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T4R9Ast__id_tiLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_LN14K_form__atom_t(&dst->t2);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t3);
}

static void _fx_copy_T4R9Ast__id_tiLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T4R9Ast__id_tiLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T4R9Ast__id_tiLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   dst->t1 = src->t1;
   FX_COPY_PTR(src->t2, &dst->t2);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t3, &dst->t3);
}

static void _fx_make_T4R9Ast__id_tiLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* t0,
   int_ t1,
   struct _fx_LN14K_form__atom_t_data_t* t2,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t3,
   struct _fx_T4R9Ast__id_tiLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   fx_result->t1 = t1;
   FX_COPY_PTR(t2, &fx_result->t2);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t3, &fx_result->t3);
}

static void _fx_free_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_LN14K_form__atom_t(&dst->t0);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t1);
}

static void _fx_copy_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t1, &dst->t1);
}

static void _fx_make_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_LN14K_form__atom_t_data_t* t0,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t1,
   struct _fx_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t1, &fx_result->t1);
}

static void _fx_free_T4R9Ast__id_tR9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T4R9Ast__id_tR9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_LN14K_form__atom_t(&dst->t2);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t3);
}

static void _fx_copy_T4R9Ast__id_tR9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T4R9Ast__id_tR9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T4R9Ast__id_tR9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   dst->t1 = src->t1;
   FX_COPY_PTR(src->t2, &dst->t2);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t3, &dst->t3);
}

static void _fx_make_T4R9Ast__id_tR9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_R9Ast__id_t* t1,
   struct _fx_LN14K_form__atom_t_data_t* t2,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t3,
   struct _fx_T4R9Ast__id_tR9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   fx_result->t1 = *t1;
   FX_COPY_PTR(t2, &fx_result->t2);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t3, &fx_result->t3);
}

static void _fx_free_LLT2BN14K_form__atom_t(struct _fx_LLT2BN14K_form__atom_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LLT2BN14K_form__atom_t, _fx_free_LT2BN14K_form__atom_t);
}

static int _fx_cons_LLT2BN14K_form__atom_t(
   struct _fx_LT2BN14K_form__atom_t_data_t* hd,
   struct _fx_LLT2BN14K_form__atom_t_data_t* tl,
   bool addref_tl,
   struct _fx_LLT2BN14K_form__atom_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LLT2BN14K_form__atom_t, FX_COPY_PTR);
}

static void _fx_free_T3BLLT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3BLLT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_LLT2BN14K_form__atom_t(&dst->t1);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3BLLT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3BLLT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T3BLLT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3BLLT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   bool t0,
   struct _fx_LLT2BN14K_form__atom_t_data_t* t1,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t2,
   struct _fx_T3BLLT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = t0;
   FX_COPY_PTR(t1, &fx_result->t1);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_T2LT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T2LT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_LT2BN14K_form__atom_t(&dst->t0);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t1);
}

static void _fx_copy_T2LT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T2LT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T2LT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t1, &dst->t1);
}

static void _fx_make_T2LT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_LT2BN14K_form__atom_t_data_t* t0,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t1,
   struct _fx_T2LT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t1, &fx_result->t1);
}

static void _fx_free_LN13K_form__dom_t(struct _fx_LN13K_form__dom_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LN13K_form__dom_t, _fx_free_N13K_form__dom_t);
}

static int _fx_cons_LN13K_form__dom_t(
   struct _fx_N13K_form__dom_t* hd,
   struct _fx_LN13K_form__dom_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN13K_form__dom_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN13K_form__dom_t, _fx_copy_N13K_form__dom_t);
}

static void _fx_free_T5N14K_form__atom_tN13Ast__border_tN18Ast__interpolate_tLN13K_form__dom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T5N14K_form__atom_tN13Ast__border_tN18Ast__interpolate_tLN13K_form__dom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14K_form__atom_t(&dst->t0);
   _fx_free_LN13K_form__dom_t(&dst->t3);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t4);
}

static void _fx_copy_T5N14K_form__atom_tN13Ast__border_tN18Ast__interpolate_tLN13K_form__dom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T5N14K_form__atom_tN13Ast__border_tN18Ast__interpolate_tLN13K_form__dom_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T5N14K_form__atom_tN13Ast__border_tN18Ast__interpolate_tLN13K_form__dom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_copy_N14K_form__atom_t(&src->t0, &dst->t0);
   dst->t1 = src->t1;
   dst->t2 = src->t2;
   FX_COPY_PTR(src->t3, &dst->t3);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t4, &dst->t4);
}

static void _fx_make_T5N14K_form__atom_tN13Ast__border_tN18Ast__interpolate_tLN13K_form__dom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_N14K_form__atom_t* t0,
   struct _fx_N13Ast__border_t* t1,
   struct _fx_N18Ast__interpolate_t* t2,
   struct _fx_LN13K_form__dom_t_data_t* t3,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t4,
   struct _fx_T5N14K_form__atom_tN13Ast__border_tN18Ast__interpolate_tLN13K_form__dom_tT2N14K_form__ktyp_tR10Ast__loc_t*
      fx_result)
{
   _fx_copy_N14K_form__atom_t(t0, &fx_result->t0);
   fx_result->t1 = *t1;
   fx_result->t2 = *t2;
   FX_COPY_PTR(t3, &fx_result->t3);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t4, &fx_result->t4);
}

static void _fx_free_T3R9Ast__id_tiT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3R9Ast__id_tiT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3R9Ast__id_tiT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3R9Ast__id_tiT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T3R9Ast__id_tiT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   dst->t1 = src->t1;
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3R9Ast__id_tiT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* t0,
   int_ t1,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t2,
   struct _fx_T3R9Ast__id_tiT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   fx_result->t1 = t1;
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_T3R9Ast__id_tN14K_form__atom_tR10Ast__loc_t(struct _fx_T3R9Ast__id_tN14K_form__atom_tR10Ast__loc_t* dst)
{
   _fx_free_N14K_form__atom_t(&dst->t1);
}

static void _fx_copy_T3R9Ast__id_tN14K_form__atom_tR10Ast__loc_t(
   struct _fx_T3R9Ast__id_tN14K_form__atom_tR10Ast__loc_t* src,
   struct _fx_T3R9Ast__id_tN14K_form__atom_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   _fx_copy_N14K_form__atom_t(&src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3R9Ast__id_tN14K_form__atom_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_N14K_form__atom_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3R9Ast__id_tN14K_form__atom_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   _fx_copy_N14K_form__atom_t(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_T2LN14K_form__kexp_tN14K_form__kexp_t(struct _fx_T2LN14K_form__kexp_tN14K_form__kexp_t* dst)
{
   _fx_free_LN14K_form__kexp_t(&dst->t0);
   _fx_free_N14K_form__kexp_t(&dst->t1);
}

static void _fx_copy_T2LN14K_form__kexp_tN14K_form__kexp_t(
   struct _fx_T2LN14K_form__kexp_tN14K_form__kexp_t* src,
   struct _fx_T2LN14K_form__kexp_tN14K_form__kexp_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2LN14K_form__kexp_tN14K_form__kexp_t(
   struct _fx_LN14K_form__kexp_t_data_t* t0,
   struct _fx_N14K_form__kexp_t_data_t* t1,
   struct _fx_T2LN14K_form__kexp_tN14K_form__kexp_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_LT2LN14K_form__kexp_tN14K_form__kexp_t(struct _fx_LT2LN14K_form__kexp_tN14K_form__kexp_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2LN14K_form__kexp_tN14K_form__kexp_t, _fx_free_T2LN14K_form__kexp_tN14K_form__kexp_t);
}

static int _fx_cons_LT2LN14K_form__kexp_tN14K_form__kexp_t(
   struct _fx_T2LN14K_form__kexp_tN14K_form__kexp_t* hd,
   struct _fx_LT2LN14K_form__kexp_tN14K_form__kexp_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2LN14K_form__kexp_tN14K_form__kexp_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2LN14K_form__kexp_tN14K_form__kexp_t, _fx_copy_T2LN14K_form__kexp_tN14K_form__kexp_t);
}

static void _fx_free_T2LT2LN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T2LT2LN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_LT2LN14K_form__kexp_tN14K_form__kexp_t(&dst->t0);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t1);
}

static void _fx_copy_T2LT2LN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T2LT2LN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T2LT2LN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t1, &dst->t1);
}

static void _fx_make_T2LT2LN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_LT2LN14K_form__kexp_tN14K_form__kexp_t_data_t* t0,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t1,
   struct _fx_T2LT2LN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t1, &fx_result->t1);
}

static void _fx_free_T3N14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14K_form__kexp_t(&dst->t0);
   _fx_free_N14K_form__kexp_t(&dst->t1);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3N14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3N14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_N14K_form__kexp_t_data_t* t0,
   struct _fx_N14K_form__kexp_t_data_t* t1,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t2,
   struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_T3N14K_form__atom_tN14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3N14K_form__atom_tN14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14K_form__atom_t(&dst->t0);
   _fx_free_N14K_form__ktyp_t(&dst->t1);
}

static void _fx_copy_T3N14K_form__atom_tN14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3N14K_form__atom_tN14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T3N14K_form__atom_tN14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_copy_N14K_form__atom_t(&src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3N14K_form__atom_tN14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_N14K_form__atom_t* t0,
   struct _fx_N14K_form__ktyp_t_data_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3N14K_form__atom_tN14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   _fx_copy_N14K_form__atom_t(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_T2R9Ast__id_tN13K_form__dom_t(struct _fx_T2R9Ast__id_tN13K_form__dom_t* dst)
{
   _fx_free_N13K_form__dom_t(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tN13K_form__dom_t(
   struct _fx_T2R9Ast__id_tN13K_form__dom_t* src,
   struct _fx_T2R9Ast__id_tN13K_form__dom_t* dst)
{
   dst->t0 = src->t0;
   _fx_copy_N13K_form__dom_t(&src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tN13K_form__dom_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_N13K_form__dom_t* t1,
   struct _fx_T2R9Ast__id_tN13K_form__dom_t* fx_result)
{
   fx_result->t0 = *t0;
   _fx_copy_N13K_form__dom_t(t1, &fx_result->t1);
}

static void _fx_free_LT2R9Ast__id_tN13K_form__dom_t(struct _fx_LT2R9Ast__id_tN13K_form__dom_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2R9Ast__id_tN13K_form__dom_t, _fx_free_T2R9Ast__id_tN13K_form__dom_t);
}

static int _fx_cons_LT2R9Ast__id_tN13K_form__dom_t(
   struct _fx_T2R9Ast__id_tN13K_form__dom_t* hd,
   struct _fx_LT2R9Ast__id_tN13K_form__dom_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2R9Ast__id_tN13K_form__dom_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2R9Ast__id_tN13K_form__dom_t, _fx_copy_T2R9Ast__id_tN13K_form__dom_t);
}

static void _fx_free_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t(
   struct _fx_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t* dst)
{
   _fx_free_N14K_form__kexp_t(&dst->t0);
   _fx_free_LT2R9Ast__id_tN13K_form__dom_t(&dst->t1);
   fx_free_list_simple(&dst->t2);
}

static void _fx_copy_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t(
   struct _fx_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t* src,
   struct _fx_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   FX_COPY_PTR(src->t2, &dst->t2);
}

static void _fx_make_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t(
   struct _fx_N14K_form__kexp_t_data_t* t0,
   struct _fx_LT2R9Ast__id_tN13K_form__dom_t_data_t* t1,
   struct _fx_LR9Ast__id_t_data_t* t2,
   struct _fx_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   FX_COPY_PTR(t2, &fx_result->t2);
}

static void _fx_free_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t(
   struct _fx_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t,
      _fx_free_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t);
}

static int _fx_cons_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t(
   struct _fx_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t* hd,
   struct _fx_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t,
      _fx_copy_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t);
}

static void
   _fx_free_T4LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T4LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tT2N14K_form__ktyp_tR10Ast__loc_t*
      dst)
{
   _fx_free_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t(&dst->t0);
   _fx_free_N14K_form__kexp_t(&dst->t1);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t3);
}

static void
   _fx_copy_T4LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T4LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tT2N14K_form__ktyp_tR10Ast__loc_t*
      src,
   struct _fx_T4LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tT2N14K_form__ktyp_tR10Ast__loc_t*
      dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t3, &dst->t3);
}

static void
   _fx_make_T4LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t_data_t* t0,
   struct _fx_N14K_form__kexp_t_data_t* t1,
   struct _fx_R16Ast__for_flags_t* t2,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t3,
   struct _fx_T4LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tT2N14K_form__ktyp_tR10Ast__loc_t*
      fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t3, &fx_result->t3);
}

static void _fx_free_T5LT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tR10Ast__loc_t(
   struct _fx_T5LT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tR10Ast__loc_t* dst)
{
   _fx_free_LT2R9Ast__id_tN13K_form__dom_t(&dst->t0);
   fx_free_list_simple(&dst->t1);
   _fx_free_N14K_form__kexp_t(&dst->t2);
}

static void _fx_copy_T5LT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tR10Ast__loc_t(
   struct _fx_T5LT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tR10Ast__loc_t* src,
   struct _fx_T5LT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   FX_COPY_PTR(src->t2, &dst->t2);
   dst->t3 = src->t3;
   dst->t4 = src->t4;
}

static void _fx_make_T5LT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tR10Ast__loc_t(
   struct _fx_LT2R9Ast__id_tN13K_form__dom_t_data_t* t0,
   struct _fx_LR9Ast__id_t_data_t* t1,
   struct _fx_N14K_form__kexp_t_data_t* t2,
   struct _fx_R16Ast__for_flags_t* t3,
   struct _fx_R10Ast__loc_t* t4,
   struct _fx_T5LT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   FX_COPY_PTR(t2, &fx_result->t2);
   fx_result->t3 = *t3;
   fx_result->t4 = *t4;
}

static void _fx_free_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t(
   struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t* dst)
{
   _fx_free_N14K_form__kexp_t(&dst->t0);
   _fx_free_N14K_form__kexp_t(&dst->t1);
}

static void _fx_copy_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t(
   struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t* src,
   struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t(
   struct _fx_N14K_form__kexp_t_data_t* t0,
   struct _fx_N14K_form__kexp_t_data_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_T2ST2N14K_form__ktyp_tR10Ast__loc_t(struct _fx_T2ST2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   fx_free_str(&dst->t0);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t1);
}

static void _fx_copy_T2ST2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T2ST2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T2ST2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   fx_copy_str(&src->t0, &dst->t0);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t1, &dst->t1);
}

static void _fx_make_T2ST2N14K_form__ktyp_tR10Ast__loc_t(
   fx_str_t* t0,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t1,
   struct _fx_T2ST2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   fx_copy_str(t0, &fx_result->t0);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t1, &fx_result->t1);
}

static void _fx_free_T3R9Ast__id_tN14K_form__kexp_tR10Ast__loc_t(struct _fx_T3R9Ast__id_tN14K_form__kexp_tR10Ast__loc_t* dst)
{
   _fx_free_N14K_form__kexp_t(&dst->t1);
}

static void _fx_copy_T3R9Ast__id_tN14K_form__kexp_tR10Ast__loc_t(
   struct _fx_T3R9Ast__id_tN14K_form__kexp_tR10Ast__loc_t* src,
   struct _fx_T3R9Ast__id_tN14K_form__kexp_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3R9Ast__id_tN14K_form__kexp_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_N14K_form__kexp_t_data_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3R9Ast__id_tN14K_form__kexp_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_N14K_form__kexp_t(struct _fx_N14K_form__kexp_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      switch ((*dst)->tag) {
      case 4:
         _fx_free_T2Nt6option1N14K_form__atom_tR10Ast__loc_t(&(*dst)->u.KExpReturn); break;
      case 5:
         _fx_free_T2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpAtom); break;
      case 6:
         _fx_free_T4N13Ast__binary_tN14K_form__atom_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpBinary);
         break;
      case 7:
         _fx_free_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpUnary); break;
      case 8:
         _fx_free_T3N13Ast__intrin_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpIntrin); break;
      case 9:
         _fx_free_T2R9Ast__id_tN14K_form__kexp_t(&(*dst)->u.KExpSync); break;
      case 10:
         _fx_free_T2LN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpSeq); break;
      case 11:
         _fx_free_T4N14K_form__kexp_tN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpIf);
         break;
      case 12:
         _fx_free_T3R9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpCall); break;
      case 13:
         _fx_free_T4R9Ast__id_tiLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpICall); break;
      case 14:
         _fx_free_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpMkTuple); break;
      case 15:
         _fx_free_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpMkRecord); break;
      case 16:
         _fx_free_T4R9Ast__id_tR9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpMkClosure); break;
      case 17:
         _fx_free_T3BLLT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpMkArray); break;
      case 18:
         _fx_free_T2LT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpMkVector); break;
      case 19:
         _fx_free_T5N14K_form__atom_tN13Ast__border_tN18Ast__interpolate_tLN13K_form__dom_tT2N14K_form__ktyp_tR10Ast__loc_t(
            &(*dst)->u.KExpAt);
         break;
      case 20:
         _fx_free_T3R9Ast__id_tiT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpMem); break;
      case 21:
         _fx_free_T3R9Ast__id_tN14K_form__atom_tR10Ast__loc_t(&(*dst)->u.KExpAssign); break;
      case 22:
         _fx_free_T2LT2LN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpMatch); break;
      case 23:
         _fx_free_T3N14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpTryCatch); break;
      case 25:
         _fx_free_T3N14K_form__atom_tN14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpCast); break;
      case 26:
         _fx_free_T4LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tT2N14K_form__ktyp_tR10Ast__loc_t(
            &(*dst)->u.KExpMap);
         break;
      case 27:
         _fx_free_T5LT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tR10Ast__loc_t(
            &(*dst)->u.KExpFor);
         break;
      case 28:
         _fx_free_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t(&(*dst)->u.KExpWhile); break;
      case 29:
         _fx_free_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t(&(*dst)->u.KExpDoWhile); break;
      case 30:
         _fx_free_T2ST2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpCCode); break;
      case 31:
         _fx_free_T3R9Ast__id_tN14K_form__kexp_tR10Ast__loc_t(&(*dst)->u.KDefVal); break;
      case 32:
         _fx_free_rR17K_form__kdeffun_t(&(*dst)->u.KDefFun); break;
      case 33:
         _fx_free_rR17K_form__kdefexn_t(&(*dst)->u.KDefExn); break;
      case 34:
         _fx_free_rR21K_form__kdefvariant_t(&(*dst)->u.KDefVariant); break;
      case 35:
         _fx_free_rR23K_form__kdefinterface_t(&(*dst)->u.KDefInterface); break;
      case 36:
         _fx_free_rR17K_form__kdeftyp_t(&(*dst)->u.KDefTyp); break;
      case 37:
         _fx_free_rR25K_form__kdefclosurevars_t(&(*dst)->u.KDefClosureVars); break;
      default:
         ;
      }
      fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_Nt6option1rR23C_form__cdefinterface_t(struct _fx_Nt6option1rR23C_form__cdefinterface_t* dst)
{
   switch (dst->tag) {
   case 2:
      _fx_free_rR23C_form__cdefinterface_t(&dst->u.Some); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_Nt6option1rR23C_form__cdefinterface_t(
   struct _fx_Nt6option1rR23C_form__cdefinterface_t* src,
   struct _fx_Nt6option1rR23C_form__cdefinterface_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 2:
      FX_COPY_PTR(src->u.Some, &dst->u.Some); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_R22C_form__c_fold_callb_t(struct _fx_R22C_form__c_fold_callb_t* dst)
{
   _fx_free_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t(&dst->ccb_fold_ident);
   _fx_free_Nt6option1FPv2N14C_form__ctyp_tR22C_form__c_fold_callb_t(&dst->ccb_fold_typ);
   _fx_free_Nt6option1FPv2N14C_form__cexp_tR22C_form__c_fold_callb_t(&dst->ccb_fold_exp);
   _fx_free_Nt6option1FPv2N15C_form__cstmt_tR22C_form__c_fold_callb_t(&dst->ccb_fold_stmt);
}

static void _fx_copy_R22C_form__c_fold_callb_t(
   struct _fx_R22C_form__c_fold_callb_t* src,
   struct _fx_R22C_form__c_fold_callb_t* dst)
{
   FX_COPY_PTR(src->ccb_fold_ident, &dst->ccb_fold_ident);
   FX_COPY_PTR(src->ccb_fold_typ, &dst->ccb_fold_typ);
   FX_COPY_PTR(src->ccb_fold_exp, &dst->ccb_fold_exp);
   FX_COPY_PTR(src->ccb_fold_stmt, &dst->ccb_fold_stmt);
}

static void _fx_make_R22C_form__c_fold_callb_t(
   struct _fx_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t_data_t* r_ccb_fold_ident,
   struct _fx_Nt6option1FPv2N14C_form__ctyp_tR22C_form__c_fold_callb_t_data_t* r_ccb_fold_typ,
   struct _fx_Nt6option1FPv2N14C_form__cexp_tR22C_form__c_fold_callb_t_data_t* r_ccb_fold_exp,
   struct _fx_Nt6option1FPv2N15C_form__cstmt_tR22C_form__c_fold_callb_t_data_t* r_ccb_fold_stmt,
   struct _fx_R22C_form__c_fold_callb_t* fx_result)
{
   FX_COPY_PTR(r_ccb_fold_ident, &fx_result->ccb_fold_ident);
   FX_COPY_PTR(r_ccb_fold_typ, &fx_result->ccb_fold_typ);
   FX_COPY_PTR(r_ccb_fold_exp, &fx_result->ccb_fold_exp);
   FX_COPY_PTR(r_ccb_fold_stmt, &fx_result->ccb_fold_stmt);
}

static void _fx_free_Nt6option1FPv2N15C_form__cstmt_tR22C_form__c_fold_callb_t(
   struct _fx_Nt6option1FPv2N15C_form__cstmt_tR22C_form__c_fold_callb_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      fx_free_fp(&(*dst)->u.Some); fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_Nt6option1FPv2N14C_form__cexp_tR22C_form__c_fold_callb_t(
   struct _fx_Nt6option1FPv2N14C_form__cexp_tR22C_form__c_fold_callb_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      fx_free_fp(&(*dst)->u.Some); fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_Nt6option1FPv2N14C_form__ctyp_tR22C_form__c_fold_callb_t(
   struct _fx_Nt6option1FPv2N14C_form__ctyp_tR22C_form__c_fold_callb_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      fx_free_fp(&(*dst)->u.Some); fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t(
   struct _fx_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      fx_free_fp(&(*dst)->u.Some); fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_R17C_form__c_callb_t(struct _fx_R17C_form__c_callb_t* dst)
{
   _fx_free_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t(&dst->ccb_ident);
   _fx_free_Nt6option1FPN14C_form__ctyp_t2N14C_form__ctyp_tR17C_form__c_callb_t(&dst->ccb_typ);
   _fx_free_Nt6option1FPN14C_form__cexp_t2N14C_form__cexp_tR17C_form__c_callb_t(&dst->ccb_exp);
   _fx_free_Nt6option1FPN15C_form__cstmt_t2N15C_form__cstmt_tR17C_form__c_callb_t(&dst->ccb_stmt);
}

static void _fx_copy_R17C_form__c_callb_t(struct _fx_R17C_form__c_callb_t* src, struct _fx_R17C_form__c_callb_t* dst)
{
   FX_COPY_PTR(src->ccb_ident, &dst->ccb_ident);
   FX_COPY_PTR(src->ccb_typ, &dst->ccb_typ);
   FX_COPY_PTR(src->ccb_exp, &dst->ccb_exp);
   FX_COPY_PTR(src->ccb_stmt, &dst->ccb_stmt);
}

static void _fx_make_R17C_form__c_callb_t(
   struct _fx_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t_data_t* r_ccb_ident,
   struct _fx_Nt6option1FPN14C_form__ctyp_t2N14C_form__ctyp_tR17C_form__c_callb_t_data_t* r_ccb_typ,
   struct _fx_Nt6option1FPN14C_form__cexp_t2N14C_form__cexp_tR17C_form__c_callb_t_data_t* r_ccb_exp,
   struct _fx_Nt6option1FPN15C_form__cstmt_t2N15C_form__cstmt_tR17C_form__c_callb_t_data_t* r_ccb_stmt,
   struct _fx_R17C_form__c_callb_t* fx_result)
{
   FX_COPY_PTR(r_ccb_ident, &fx_result->ccb_ident);
   FX_COPY_PTR(r_ccb_typ, &fx_result->ccb_typ);
   FX_COPY_PTR(r_ccb_exp, &fx_result->ccb_exp);
   FX_COPY_PTR(r_ccb_stmt, &fx_result->ccb_stmt);
}

static void _fx_free_Nt6option1FPN15C_form__cstmt_t2N15C_form__cstmt_tR17C_form__c_callb_t(
   struct _fx_Nt6option1FPN15C_form__cstmt_t2N15C_form__cstmt_tR17C_form__c_callb_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      fx_free_fp(&(*dst)->u.Some); fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_Nt6option1FPN14C_form__cexp_t2N14C_form__cexp_tR17C_form__c_callb_t(
   struct _fx_Nt6option1FPN14C_form__cexp_t2N14C_form__cexp_tR17C_form__c_callb_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      fx_free_fp(&(*dst)->u.Some); fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_Nt6option1FPN14C_form__ctyp_t2N14C_form__ctyp_tR17C_form__c_callb_t(
   struct _fx_Nt6option1FPN14C_form__ctyp_t2N14C_form__ctyp_tR17C_form__c_callb_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      fx_free_fp(&(*dst)->u.Some); fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t(
   struct _fx_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      fx_free_fp(&(*dst)->u.Some); fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_Nt6option1N14C_form__ctyp_t(struct _fx_Nt6option1N14C_form__ctyp_t* dst)
{
   switch (dst->tag) {
   case 2:
      _fx_free_N14C_form__ctyp_t(&dst->u.Some); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_Nt6option1N14C_form__ctyp_t(
   struct _fx_Nt6option1N14C_form__ctyp_t* src,
   struct _fx_Nt6option1N14C_form__ctyp_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 2:
      FX_COPY_PTR(src->u.Some, &dst->u.Some); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_T2SR10Ast__loc_t(struct _fx_T2SR10Ast__loc_t* dst)
{
   fx_free_str(&dst->t0);
}

static void _fx_copy_T2SR10Ast__loc_t(struct _fx_T2SR10Ast__loc_t* src, struct _fx_T2SR10Ast__loc_t* dst)
{
   fx_copy_str(&src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2SR10Ast__loc_t(fx_str_t* t0, struct _fx_R10Ast__loc_t* t1, struct _fx_T2SR10Ast__loc_t* fx_result)
{
   fx_copy_str(t0, &fx_result->t0);
   fx_result->t1 = *t1;
}

static void _fx_free_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t(
   struct _fx_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t* dst)
{
   _fx_free_LT2R9Ast__id_tN14C_form__ctyp_t(&dst->t1);
}

static void _fx_copy_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t(
   struct _fx_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t* src,
   struct _fx_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t(
   struct _fx_Nt6option1R9Ast__id_t* t0,
   struct _fx_LT2R9Ast__id_tN14C_form__ctyp_t_data_t* t1,
   struct _fx_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_LN14C_form__ctyp_t(struct _fx_LN14C_form__ctyp_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LN14C_form__ctyp_t, _fx_free_N14C_form__ctyp_t);
}

static int _fx_cons_LN14C_form__ctyp_t(
   struct _fx_N14C_form__ctyp_t_data_t* hd,
   struct _fx_LN14C_form__ctyp_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN14C_form__ctyp_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN14C_form__ctyp_t, FX_COPY_PTR);
}

static void _fx_free_T2LN14C_form__ctyp_tN14C_form__ctyp_t(struct _fx_T2LN14C_form__ctyp_tN14C_form__ctyp_t* dst)
{
   _fx_free_LN14C_form__ctyp_t(&dst->t0);
   _fx_free_N14C_form__ctyp_t(&dst->t1);
}

static void _fx_copy_T2LN14C_form__ctyp_tN14C_form__ctyp_t(
   struct _fx_T2LN14C_form__ctyp_tN14C_form__ctyp_t* src,
   struct _fx_T2LN14C_form__ctyp_tN14C_form__ctyp_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2LN14C_form__ctyp_tN14C_form__ctyp_t(
   struct _fx_LN14C_form__ctyp_t_data_t* t0,
   struct _fx_N14C_form__ctyp_t_data_t* t1,
   struct _fx_T2LN14C_form__ctyp_tN14C_form__ctyp_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
}

static int _fx_cons_LN19C_form__ctyp_attr_t(
   struct _fx_N19C_form__ctyp_attr_t* hd,
   struct _fx_LN19C_form__ctyp_attr_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN19C_form__ctyp_attr_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN19C_form__ctyp_attr_t, FX_COPY_SIMPLE_BY_PTR);
}

static void _fx_free_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t(struct _fx_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t* dst)
{
   fx_free_list_simple(&dst->t0);
   _fx_free_N14C_form__ctyp_t(&dst->t1);
}

static void _fx_copy_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t(
   struct _fx_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t* src,
   struct _fx_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t(
   struct _fx_LN19C_form__ctyp_attr_t_data_t* t0,
   struct _fx_N14C_form__ctyp_t_data_t* t1,
   struct _fx_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_T2iN14C_form__ctyp_t(struct _fx_T2iN14C_form__ctyp_t* dst)
{
   _fx_free_N14C_form__ctyp_t(&dst->t1);
}

static void _fx_copy_T2iN14C_form__ctyp_t(struct _fx_T2iN14C_form__ctyp_t* src, struct _fx_T2iN14C_form__ctyp_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2iN14C_form__ctyp_t(
   int_ t0,
   struct _fx_N14C_form__ctyp_t_data_t* t1,
   struct _fx_T2iN14C_form__ctyp_t* fx_result)
{
   fx_result->t0 = t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_N14C_form__ctyp_t(struct _fx_N14C_form__ctyp_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      switch ((*dst)->tag) {
      case 14:
         _fx_free_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t(&(*dst)->u.CTypStruct); break;
      case 15:
         _fx_free_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t(&(*dst)->u.CTypUnion); break;
      case 16:
         _fx_free_T2LN14C_form__ctyp_tN14C_form__ctyp_t(&(*dst)->u.CTypFunRawPtr); break;
      case 17:
         _fx_free_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t(&(*dst)->u.CTypRawPtr); break;
      case 18:
         _fx_free_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t(&(*dst)->u.CTypRawArray); break;
      case 19:
         _fx_free_T2iN14C_form__ctyp_t(&(*dst)->u.CTypArray); break;
      case 20:
         _fx_free_N14C_form__ctyp_t(&(*dst)->u.CTypVector); break;
      default:
         ;
      }
      fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14C_form__ctyp_t(&dst->t0);
}

static void _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* src,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N14C_form__ctyp_t_data_t* t0,
   struct _fx_R10Ast__loc_t* t1,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   fx_result->t1 = *t1;
}

static void _fx_free_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* src,
   struct _fx_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* t1,
   struct _fx_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(t1, &fx_result->t1);
}

static void _fx_free_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14K_form__klit_t(&dst->t0);
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&dst->t1);
}

static void _fx_copy_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t* src,
   struct _fx_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   _fx_copy_N14K_form__klit_t(&src->t0, &dst->t0);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&src->t1, &dst->t1);
}

static void _fx_make_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N14K_form__klit_t* t0,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* t1,
   struct _fx_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t* fx_result)
{
   _fx_copy_N14K_form__klit_t(t0, &fx_result->t0);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(t1, &fx_result->t1);
}

static void _fx_free_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14C_form__cexp_t(&dst->t1);
   _fx_free_N14C_form__cexp_t(&dst->t2);
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&dst->t3);
}

static void _fx_copy_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* src,
   struct _fx_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
   FX_COPY_PTR(src->t2, &dst->t2);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&src->t3, &dst->t3);
}

static void _fx_make_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N17C_form__cbinary_t* t0,
   struct _fx_N14C_form__cexp_t_data_t* t1,
   struct _fx_N14C_form__cexp_t_data_t* t2,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* t3,
   struct _fx_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
   FX_COPY_PTR(t2, &fx_result->t2);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(t3, &fx_result->t3);
}

static void _fx_free_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14C_form__cexp_t(&dst->t1);
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* src,
   struct _fx_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N16C_form__cunary_t* t0,
   struct _fx_N14C_form__cexp_t_data_t* t1,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* t2,
   struct _fx_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14C_form__cexp_t(&dst->t0);
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* src,
   struct _fx_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   dst->t1 = src->t1;
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N14C_form__cexp_t_data_t* t0,
   struct _fx_R9Ast__id_t* t1,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* t2,
   struct _fx_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   fx_result->t1 = *t1;
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14C_form__cexp_t(&dst->t0);
   _fx_free_N14C_form__ctyp_t(&dst->t1);
}

static void _fx_copy_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t* src,
   struct _fx_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N14C_form__cexp_t_data_t* t0,
   struct _fx_N14C_form__ctyp_t_data_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14C_form__cexp_t(&dst->t0);
   _fx_free_N14C_form__cexp_t(&dst->t1);
   _fx_free_N14C_form__cexp_t(&dst->t2);
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&dst->t3);
}

static void _fx_copy_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* src,
   struct _fx_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   FX_COPY_PTR(src->t2, &dst->t2);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&src->t3, &dst->t3);
}

static void _fx_make_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N14C_form__cexp_t_data_t* t0,
   struct _fx_N14C_form__cexp_t_data_t* t1,
   struct _fx_N14C_form__cexp_t_data_t* t2,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* t3,
   struct _fx_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   FX_COPY_PTR(t2, &fx_result->t2);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(t3, &fx_result->t3);
}

static void _fx_free_LN14C_form__cexp_t(struct _fx_LN14C_form__cexp_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LN14C_form__cexp_t, _fx_free_N14C_form__cexp_t);
}

static int _fx_cons_LN14C_form__cexp_t(
   struct _fx_N14C_form__cexp_t_data_t* hd,
   struct _fx_LN14C_form__cexp_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN14C_form__cexp_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN14C_form__cexp_t, FX_COPY_PTR);
}

static void _fx_free_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14C_form__cexp_t(&dst->t0);
   _fx_free_LN14C_form__cexp_t(&dst->t1);
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* src,
   struct _fx_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N14C_form__cexp_t_data_t* t0,
   struct _fx_LN14C_form__cexp_t_data_t* t1,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* t2,
   struct _fx_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   _fx_free_LN14C_form__cexp_t(&dst->t0);
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&dst->t1);
}

static void _fx_copy_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* src,
   struct _fx_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&src->t1, &dst->t1);
}

static void _fx_make_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_LN14C_form__cexp_t_data_t* t0,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* t1,
   struct _fx_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(t1, &fx_result->t1);
}

static void _fx_free_N14C_form__cexp_t(struct _fx_N14C_form__cexp_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      switch ((*dst)->tag) {
      case 1:
         _fx_free_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(&(*dst)->u.CExpIdent); break;
      case 2:
         _fx_free_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t(&(*dst)->u.CExpLit); break;
      case 3:
         _fx_free_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
            &(*dst)->u.CExpBinary);
         break;
      case 4:
         _fx_free_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(&(*dst)->u.CExpUnary); break;
      case 5:
         _fx_free_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(&(*dst)->u.CExpMem); break;
      case 6:
         _fx_free_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(&(*dst)->u.CExpArrow); break;
      case 7:
         _fx_free_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t(&(*dst)->u.CExpCast); break;
      case 8:
         _fx_free_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(&(*dst)->u.CExpTernary);
         break;
      case 9:
         _fx_free_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(&(*dst)->u.CExpCall); break;
      case 10:
         _fx_free_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(&(*dst)->u.CExpInit); break;
      case 11:
         _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&(*dst)->u.CExpTyp); break;
      case 12:
         _fx_free_T2SR10Ast__loc_t(&(*dst)->u.CExpCCode); break;
      default:
         ;
      }
      fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_T2Nt6option1N14C_form__cexp_tR10Ast__loc_t(struct _fx_T2Nt6option1N14C_form__cexp_tR10Ast__loc_t* dst)
{
   _fx_free_Nt6option1N14C_form__cexp_t(&dst->t0);
}

static void _fx_copy_T2Nt6option1N14C_form__cexp_tR10Ast__loc_t(
   struct _fx_T2Nt6option1N14C_form__cexp_tR10Ast__loc_t* src,
   struct _fx_T2Nt6option1N14C_form__cexp_tR10Ast__loc_t* dst)
{
   _fx_copy_Nt6option1N14C_form__cexp_t(&src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2Nt6option1N14C_form__cexp_tR10Ast__loc_t(
   struct _fx_Nt6option1N14C_form__cexp_t* t0,
   struct _fx_R10Ast__loc_t* t1,
   struct _fx_T2Nt6option1N14C_form__cexp_tR10Ast__loc_t* fx_result)
{
   _fx_copy_Nt6option1N14C_form__cexp_t(t0, &fx_result->t0);
   fx_result->t1 = *t1;
}

static void _fx_free_T2LN15C_form__cstmt_tR10Ast__loc_t(struct _fx_T2LN15C_form__cstmt_tR10Ast__loc_t* dst)
{
   _fx_free_LN15C_form__cstmt_t(&dst->t0);
}

static void _fx_copy_T2LN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_T2LN15C_form__cstmt_tR10Ast__loc_t* src,
   struct _fx_T2LN15C_form__cstmt_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2LN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_LN15C_form__cstmt_t_data_t* t0,
   struct _fx_R10Ast__loc_t* t1,
   struct _fx_T2LN15C_form__cstmt_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   fx_result->t1 = *t1;
}

static void _fx_free_T2R9Ast__id_tN15C_form__cstmt_t(struct _fx_T2R9Ast__id_tN15C_form__cstmt_t* dst)
{
   _fx_free_N15C_form__cstmt_t(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tN15C_form__cstmt_t(
   struct _fx_T2R9Ast__id_tN15C_form__cstmt_t* src,
   struct _fx_T2R9Ast__id_tN15C_form__cstmt_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tN15C_form__cstmt_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_N15C_form__cstmt_t_data_t* t1,
   struct _fx_T2R9Ast__id_tN15C_form__cstmt_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t* dst)
{
   _fx_free_N14C_form__cexp_t(&dst->t0);
   _fx_free_N15C_form__cstmt_t(&dst->t1);
   _fx_free_N15C_form__cstmt_t(&dst->t2);
}

static void _fx_copy_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t* src,
   struct _fx_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   FX_COPY_PTR(src->t2, &dst->t2);
   dst->t3 = src->t3;
}

static void _fx_make_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_N14C_form__cexp_t_data_t* t0,
   struct _fx_N15C_form__cstmt_t_data_t* t1,
   struct _fx_N15C_form__cstmt_t_data_t* t2,
   struct _fx_R10Ast__loc_t* t3,
   struct _fx_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   FX_COPY_PTR(t2, &fx_result->t2);
   fx_result->t3 = *t3;
}

static void
   _fx_free_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t*
      dst)
{
   _fx_free_Nt6option1N14C_form__ctyp_t(&dst->t0);
   _fx_free_LN14C_form__cexp_t(&dst->t1);
   _fx_free_Nt6option1N14C_form__cexp_t(&dst->t2);
   _fx_free_LN14C_form__cexp_t(&dst->t3);
   _fx_free_N15C_form__cstmt_t(&dst->t4);
}

static void
   _fx_copy_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t*
      src,
   struct _fx_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t*
      dst)
{
   _fx_copy_Nt6option1N14C_form__ctyp_t(&src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   _fx_copy_Nt6option1N14C_form__cexp_t(&src->t2, &dst->t2);
   FX_COPY_PTR(src->t3, &dst->t3);
   FX_COPY_PTR(src->t4, &dst->t4);
   dst->t5 = src->t5;
}

static void
   _fx_make_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_Nt6option1N14C_form__ctyp_t* t0,
   struct _fx_LN14C_form__cexp_t_data_t* t1,
   struct _fx_Nt6option1N14C_form__cexp_t* t2,
   struct _fx_LN14C_form__cexp_t_data_t* t3,
   struct _fx_N15C_form__cstmt_t_data_t* t4,
   struct _fx_R10Ast__loc_t* t5,
   struct _fx_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t*
      fx_result)
{
   _fx_copy_Nt6option1N14C_form__ctyp_t(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   _fx_copy_Nt6option1N14C_form__cexp_t(t2, &fx_result->t2);
   FX_COPY_PTR(t3, &fx_result->t3);
   FX_COPY_PTR(t4, &fx_result->t4);
   fx_result->t5 = *t5;
}

static void _fx_free_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t* dst)
{
   _fx_free_N14C_form__cexp_t(&dst->t0);
   _fx_free_N15C_form__cstmt_t(&dst->t1);
}

static void _fx_copy_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t* src,
   struct _fx_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_N14C_form__cexp_t_data_t* t0,
   struct _fx_N15C_form__cstmt_t_data_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t(
   struct _fx_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t* dst)
{
   _fx_free_N15C_form__cstmt_t(&dst->t0);
   _fx_free_N14C_form__cexp_t(&dst->t1);
}

static void _fx_copy_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t(
   struct _fx_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t* src,
   struct _fx_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t(
   struct _fx_N15C_form__cstmt_t_data_t* t0,
   struct _fx_N14C_form__cexp_t_data_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_T2LN14C_form__cexp_tLN15C_form__cstmt_t(struct _fx_T2LN14C_form__cexp_tLN15C_form__cstmt_t* dst)
{
   _fx_free_LN14C_form__cexp_t(&dst->t0);
   _fx_free_LN15C_form__cstmt_t(&dst->t1);
}

static void _fx_copy_T2LN14C_form__cexp_tLN15C_form__cstmt_t(
   struct _fx_T2LN14C_form__cexp_tLN15C_form__cstmt_t* src,
   struct _fx_T2LN14C_form__cexp_tLN15C_form__cstmt_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2LN14C_form__cexp_tLN15C_form__cstmt_t(
   struct _fx_LN14C_form__cexp_t_data_t* t0,
   struct _fx_LN15C_form__cstmt_t_data_t* t1,
   struct _fx_T2LN14C_form__cexp_tLN15C_form__cstmt_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_LT2LN14C_form__cexp_tLN15C_form__cstmt_t(struct _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t, _fx_free_T2LN14C_form__cexp_tLN15C_form__cstmt_t);
}

static int _fx_cons_LT2LN14C_form__cexp_tLN15C_form__cstmt_t(
   struct _fx_T2LN14C_form__cexp_tLN15C_form__cstmt_t* hd,
   struct _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t, _fx_copy_T2LN14C_form__cexp_tLN15C_form__cstmt_t);
}

static void _fx_free_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t* dst)
{
   _fx_free_N14C_form__cexp_t(&dst->t0);
   _fx_free_LT2LN14C_form__cexp_tLN15C_form__cstmt_t(&dst->t1);
}

static void _fx_copy_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t* src,
   struct _fx_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_N14C_form__cexp_t_data_t* t0,
   struct _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t_data_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t(
   struct _fx_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t* dst)
{
   _fx_free_N14C_form__ctyp_t(&dst->t0);
   _fx_free_Nt6option1N14C_form__cexp_t(&dst->t2);
}

static void _fx_copy_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t(
   struct _fx_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t* src,
   struct _fx_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   dst->t1 = src->t1;
   _fx_copy_Nt6option1N14C_form__cexp_t(&src->t2, &dst->t2);
   dst->t3 = src->t3;
}

static void _fx_make_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t(
   struct _fx_N14C_form__ctyp_t_data_t* t0,
   struct _fx_R9Ast__id_t* t1,
   struct _fx_Nt6option1N14C_form__cexp_t* t2,
   struct _fx_R10Ast__loc_t* t3,
   struct _fx_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   fx_result->t1 = *t1;
   _fx_copy_Nt6option1N14C_form__cexp_t(t2, &fx_result->t2);
   fx_result->t3 = *t3;
}

static void _fx_free_T2N14C_form__cexp_tLN15C_form__cstmt_t(struct _fx_T2N14C_form__cexp_tLN15C_form__cstmt_t* dst)
{
   _fx_free_N14C_form__cexp_t(&dst->t0);
   _fx_free_LN15C_form__cstmt_t(&dst->t1);
}

static void _fx_copy_T2N14C_form__cexp_tLN15C_form__cstmt_t(
   struct _fx_T2N14C_form__cexp_tLN15C_form__cstmt_t* src,
   struct _fx_T2N14C_form__cexp_tLN15C_form__cstmt_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2N14C_form__cexp_tLN15C_form__cstmt_t(
   struct _fx_N14C_form__cexp_t_data_t* t0,
   struct _fx_LN15C_form__cstmt_t_data_t* t1,
   struct _fx_T2N14C_form__cexp_tLN15C_form__cstmt_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_LT2N14C_form__cexp_tLN15C_form__cstmt_t(struct _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t, _fx_free_T2N14C_form__cexp_tLN15C_form__cstmt_t);
}

static int _fx_cons_LT2N14C_form__cexp_tLN15C_form__cstmt_t(
   struct _fx_T2N14C_form__cexp_tLN15C_form__cstmt_t* hd,
   struct _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t, _fx_copy_T2N14C_form__cexp_tLN15C_form__cstmt_t);
}

static void _fx_free_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t* dst)
{
   _fx_free_LT2N14C_form__cexp_tLN15C_form__cstmt_t(&dst->t0);
   _fx_free_LN15C_form__cstmt_t(&dst->t1);
}

static void _fx_copy_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t* src,
   struct _fx_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t_data_t* t0,
   struct _fx_LN15C_form__cstmt_t_data_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_N15C_form__cstmt_t(struct _fx_N15C_form__cstmt_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      switch ((*dst)->tag) {
      case 2:
         _fx_free_T2SR10Ast__loc_t(&(*dst)->u.CComment); break;
      case 3:
         _fx_free_N14C_form__cexp_t(&(*dst)->u.CExp); break;
      case 6:
         _fx_free_T2Nt6option1N14C_form__cexp_tR10Ast__loc_t(&(*dst)->u.CStmtReturn); break;
      case 7:
         _fx_free_T2LN15C_form__cstmt_tR10Ast__loc_t(&(*dst)->u.CStmtBlock); break;
      case 8:
         _fx_free_T2R9Ast__id_tN15C_form__cstmt_t(&(*dst)->u.CStmtSync); break;
      case 9:
         _fx_free_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t(&(*dst)->u.CStmtIf); break;
      case 12:
         _fx_free_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t(
            &(*dst)->u.CStmtFor);
         break;
      case 13:
         _fx_free_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t(&(*dst)->u.CStmtWhile); break;
      case 14:
         _fx_free_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t(&(*dst)->u.CStmtDoWhile); break;
      case 15:
         _fx_free_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t(&(*dst)->u.CStmtSwitch); break;
      case 16:
         _fx_free_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t(&(*dst)->u.CDefVal); break;
      case 17:
         _fx_free_rR17C_form__cdeffun_t(&(*dst)->u.CDefFun); break;
      case 18:
         _fx_free_rR17C_form__cdeftyp_t(&(*dst)->u.CDefTyp); break;
      case 21:
         _fx_free_rR18C_form__cdefenum_t(&(*dst)->u.CDefEnum); break;
      case 22:
         _fx_free_rR23C_form__cdefinterface_t(&(*dst)->u.CDefInterface); break;
      case 23:
         _fx_free_rR19C_form__cdefmacro_t(&(*dst)->u.CMacroDef); break;
      case 25:
         _fx_free_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t(&(*dst)->u.CMacroIf); break;
      case 26:
         _fx_free_T2SR10Ast__loc_t(&(*dst)->u.CMacroInclude); break;
      case 27:
         _fx_free_T2SR10Ast__loc_t(&(*dst)->u.CMacroPragma); break;
      default:
         ;
      }
      fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_T2SR9Ast__id_t(struct _fx_T2SR9Ast__id_t* dst)
{
   fx_free_str(&dst->t0);
}

static void _fx_copy_T2SR9Ast__id_t(struct _fx_T2SR9Ast__id_t* src, struct _fx_T2SR9Ast__id_t* dst)
{
   fx_copy_str(&src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2SR9Ast__id_t(fx_str_t* t0, struct _fx_R9Ast__id_t* t1, struct _fx_T2SR9Ast__id_t* fx_result)
{
   fx_copy_str(t0, &fx_result->t0);
   fx_result->t1 = *t1;
}

_fx_Nt6option1rR23C_form__cdefinterface_t _fx_g12C_form__None = { 1 };
_fx_Nt6option1R9Ast__id_t _fx_g14C_form__None1_ = { 1 };
static _fx_N14K_form__ktyp_t_data_t KTypVoid_data_7 = { 1, 7 };
_fx_N14K_form__ktyp_t _fx_g16C_form__KTypVoid = &KTypVoid_data_7;
_fx_N17C_form__cbinary_t _fx_g14C_form__COpAdd = { 1 };
_fx_N17C_form__cbinary_t _fx_g20C_form__COpArrayElem = { 14 };
_fx_N17C_form__cbinary_t _fx_g17C_form__COpAssign = { 15 };
_fx_N16C_form__cunary_t _fx_g16C_form__COpDeref = { 5 };
_fx_N16C_form__cunary_t _fx_g18C_form__COpGetAddr = { 6 };
_fx_N19C_form__ctyp_attr_t _fx_g17C_form__CTypConst = { 1 };
static _fx_N14C_form__ctyp_t_data_t CTypInt_data_0 = { 1, 1 };
_fx_N14C_form__ctyp_t _fx_g15C_form__CTypInt = &CTypInt_data_0;
static _fx_N14C_form__ctyp_t_data_t CTypCInt_data_0 = { 1, 2 };
_fx_N14C_form__ctyp_t _fx_g16C_form__CTypCInt = &CTypCInt_data_0;
static _fx_N14C_form__ctyp_t_data_t CTypVoid_data_0 = { 1, 8 };
_fx_N14C_form__ctyp_t _fx_g16C_form__CTypVoid = &CTypVoid_data_0;
static _fx_N14C_form__ctyp_t_data_t CTypBool_data_0 = { 1, 9 };
_fx_N14C_form__ctyp_t _fx_g16C_form__CTypBool = &CTypBool_data_0;
static _fx_N14C_form__ctyp_t_data_t CTypUniChar_data_0 = { 1, 10 };
_fx_N14C_form__ctyp_t _fx_g19C_form__CTypUniChar = &CTypUniChar_data_0;
static _fx_N14C_form__ctyp_t_data_t CTypString_data_0 = { 1, 12 };
_fx_N14C_form__ctyp_t _fx_g18C_form__CTypString = &CTypString_data_0;
static _fx_N14C_form__ctyp_t_data_t CTypExn_data_0 = { 1, 13 };
_fx_N14C_form__ctyp_t _fx_g15C_form__CTypExn = &CTypExn_data_0;
static _fx_N14C_form__ctyp_t_data_t CTypLabel_data_0 = { 1, 22 };
_fx_N14C_form__ctyp_t _fx_g17C_form__CTypLabel = &CTypLabel_data_0;
static _fx_N14C_form__ctyp_t_data_t CTypAny_data_0 = { 1, 23 };
_fx_N14C_form__ctyp_t _fx_g15C_form__CTypAny = &CTypAny_data_0;
_fx_N15C_form__cinfo_t _fx_g13C_form__CNone = { 1 };
fx_arr_t _fx_g16C_form__all_idcs = {0};
bool _fx_g19C_form__freeze_idcs = true;
_fx_N14C_form__ctyp_t _fx_g23C_form__std_CTypVoidPtr = 0;
_fx_N14C_form__ctyp_t _fx_g28C_form__std_CTypConstVoidPtr = 0;
_fx_N14C_form__ctyp_t _fx_g24C_form__std_CTypAnyArray = 0;
_fx_N14C_form__ctyp_t _fx_g25C_form__std_CTypAnyVector = 0;
_fx_R9Ast__id_t _fx_g18C_form__std_sizeof;
_fx_R9Ast__id_t _fx_g21C_form__std_fx_malloc;
_fx_R9Ast__id_t _fx_g19C_form__std_fx_free;
_fx_N14C_form__ctyp_t _fx_g21C_form__std_fx_free_t = 0;
_fx_N14C_form__ctyp_t _fx_g21C_form__std_fx_copy_t = 0;
_fx_R9Ast__id_t _fx_g21C_form__std_FX_INCREF;
_fx_R9Ast__id_t _fx_g21C_form__std_FX_DECREF;
_fx_R9Ast__id_t _fx_g30C_form__std_FX_REC_VARIANT_TAG;
_fx_R9Ast__id_t _fx_g48C_form__std_FX_MAKE_RECURSIVE_VARIANT_IMPL_START;
_fx_R9Ast__id_t _fx_g33C_form__std_FX_MAKE_FP_IMPL_START;
_fx_R9Ast__id_t _fx_g29C_form__std_FX_MAKE_FP_BY_FCV;
_fx_R9Ast__id_t _fx_g19C_form__std_FX_CALL;
_fx_R9Ast__id_t _fx_g23C_form__std_FX_COPY_PTR;
_fx_R9Ast__id_t _fx_g26C_form__std_FX_COPY_SIMPLE;
_fx_R9Ast__id_t _fx_g33C_form__std_FX_COPY_SIMPLE_BY_PTR;
_fx_R9Ast__id_t _fx_g18C_form__std_FX_NOP;
_fx_R9Ast__id_t _fx_g20C_form__std_FX_BREAK;
_fx_R9Ast__id_t _fx_g23C_form__std_FX_CONTINUE;
_fx_R9Ast__id_t _fx_g26C_form__std_FX_CHECK_BREAK;
_fx_R9Ast__id_t _fx_g29C_form__std_FX_CHECK_BREAK_ND;
_fx_R9Ast__id_t _fx_g29C_form__std_FX_CHECK_CONTINUE;
_fx_R9Ast__id_t _fx_g24C_form__std_FX_CHECK_EXN;
_fx_R9Ast__id_t _fx_g30C_form__std_FX_CHECK_ZERO_STEP;
_fx_R9Ast__id_t _fx_g25C_form__std_FX_LOOP_COUNT;
_fx_R9Ast__id_t _fx_g28C_form__std_FX_CHECK_EQ_SIZE;
_fx_R9Ast__id_t _fx_g23C_form__std_fx_copy_ptr;
_fx_R9Ast__id_t _fx_g25C_form__std_FX_STR_LENGTH;
_fx_R9Ast__id_t _fx_g25C_form__std_FX_STR_CHKIDX;
_fx_R9Ast__id_t _fx_g23C_form__std_FX_STR_ELEM;
_fx_R9Ast__id_t _fx_g28C_form__std_FX_STR_ELEM_CLIP;
_fx_R9Ast__id_t _fx_g28C_form__std_FX_STR_ELEM_WRAP;
_fx_R9Ast__id_t _fx_g28C_form__std_FX_STR_ELEM_ZERO;
_fx_R9Ast__id_t _fx_g23C_form__std_FX_MAKE_STR;
_fx_R9Ast__id_t _fx_g23C_form__std_FX_FREE_STR;
_fx_R9Ast__id_t _fx_g23C_form__std_fx_free_str;
_fx_R9Ast__id_t _fx_g23C_form__std_FX_COPY_STR;
_fx_R9Ast__id_t _fx_g23C_form__std_fx_copy_str;
_fx_R9Ast__id_t _fx_g21C_form__std_fx_substr;
_fx_R9Ast__id_t _fx_g24C_form__std_FX_FREE_LONG;
_fx_R9Ast__id_t _fx_g24C_form__std_fx_free_long;
_fx_R9Ast__id_t _fx_g24C_form__std_FX_COPY_LONG;
_fx_R9Ast__id_t _fx_g24C_form__std_fx_copy_long;
_fx_N14C_form__ctyp_t _fx_g25C_form__std_fx_exn_info_t = 0;
_fx_R9Ast__id_t _fx_g29C_form__std_FX_REG_SIMPLE_EXN;
_fx_R9Ast__id_t _fx_g33C_form__std_FX_REG_SIMPLE_STD_EXN;
_fx_R9Ast__id_t _fx_g22C_form__std_FX_REG_EXN;
_fx_R9Ast__id_t _fx_g34C_form__std_FX_MAKE_EXN_IMPL_START;
_fx_R9Ast__id_t _fx_g20C_form__std_FX_THROW;
_fx_R9Ast__id_t _fx_g25C_form__std_FX_FAST_THROW;
_fx_R9Ast__id_t _fx_g23C_form__std_FX_FREE_EXN;
_fx_R9Ast__id_t _fx_g23C_form__std_FX_COPY_EXN;
_fx_R9Ast__id_t _fx_g28C_form__std_FX_MAKE_EXN_IMPL;
_fx_R9Ast__id_t _fx_g23C_form__std_fx_free_exn;
_fx_R9Ast__id_t _fx_g23C_form__std_fx_copy_exn;
_fx_R9Ast__id_t _fx_g22C_form__std_FX_RETHROW;
_fx_R9Ast__id_t _fx_g31C_form__std_FX_FREE_LIST_SIMPLE;
_fx_R9Ast__id_t _fx_g31C_form__std_fx_free_list_simple;
_fx_R9Ast__id_t _fx_g26C_form__std_fx_list_length;
_fx_R9Ast__id_t _fx_g29C_form__std_FX_FREE_LIST_IMPL;
_fx_R9Ast__id_t _fx_g29C_form__std_FX_MAKE_LIST_IMPL;
_fx_R9Ast__id_t _fx_g26C_form__std_FX_LIST_APPEND;
_fx_R9Ast__id_t _fx_g24C_form__std_FX_MOVE_LIST;
_fx_R9Ast__id_t _fx_g22C_form__std_FX_CHKIDX1;
_fx_R9Ast__id_t _fx_g21C_form__std_FX_CHKIDX;
_fx_LR9Ast__id_t _fx_g21C_form__std_FX_PTR_xD = 0;
_fx_LR9Ast__id_t _fx_g26C_form__std_FX_PTR_xD_CLIP = 0;
_fx_LR9Ast__id_t _fx_g26C_form__std_FX_PTR_xD_WRAP = 0;
_fx_LR9Ast__id_t _fx_g26C_form__std_FX_PTR_xD_ZERO = 0;
_fx_R9Ast__id_t _fx_g23C_form__std_FX_ARR_SIZE;
_fx_R9Ast__id_t _fx_g23C_form__std_FX_FREE_ARR;
_fx_R9Ast__id_t _fx_g23C_form__std_FX_MOVE_ARR;
_fx_R9Ast__id_t _fx_g23C_form__std_fx_free_arr;
_fx_R9Ast__id_t _fx_g23C_form__std_fx_copy_arr;
_fx_R9Ast__id_t _fx_g28C_form__std_fx_copy_arr_data;
_fx_R9Ast__id_t _fx_g23C_form__std_fx_make_arr;
_fx_R9Ast__id_t _fx_g21C_form__std_fx_subarr;
_fx_R9Ast__id_t _fx_g23C_form__std_fx_free_vec;
_fx_R9Ast__id_t _fx_g23C_form__std_fx_copy_vec;
_fx_R9Ast__id_t _fx_g23C_form__std_fx_make_vec;
_fx_R9Ast__id_t _fx_g30C_form__std_FX_FREE_REF_SIMPLE;
_fx_R9Ast__id_t _fx_g30C_form__std_fx_free_ref_simple;
_fx_R9Ast__id_t _fx_g28C_form__std_FX_FREE_REF_IMPL;
_fx_R9Ast__id_t _fx_g28C_form__std_FX_MAKE_REF_IMPL;
_fx_R9Ast__id_t _fx_g22C_form__std_FX_FREE_FP;
_fx_R9Ast__id_t _fx_g22C_form__std_FX_COPY_FP;
_fx_R9Ast__id_t _fx_g22C_form__std_fx_free_fp;
_fx_R9Ast__id_t _fx_g22C_form__std_fx_copy_fp;
_fx_R9Ast__id_t _fx_g24C_form__std_fx_free_cptr;
_fx_R9Ast__id_t _fx_g24C_form__std_fx_copy_cptr;
_fx_N14C_form__ctyp_t _fx_g28C_form__std_fx_ifaces_t_cptr = 0;
_fx_R9Ast__id_t _fx_g25C_form__std_FX_COPY_IFACE;
_fx_R9Ast__id_t _fx_g25C_form__std_FX_FREE_IFACE;
_fx_R9Ast__id_t _fx_g25C_form__std_fx_copy_iface;
_fx_R9Ast__id_t _fx_g25C_form__std_fx_free_iface;
_fx_R9Ast__id_t _fx_g26C_form__std_fx_query_iface;
_fx_R9Ast__id_t _fx_g25C_form__std_fx_get_object;
_fx_R9Ast__id_t _fx_g25C_form__std_fx_make_iface;
FX_EXTERN_C int _fx_F9make_FailE1S(fx_str_t* arg0, fx_exn_t* fx_result);

FX_EXTERN_C_VAL(fx_arr_t _fx_g16Ast__all_modules)
FX_EXTERN_C_VAL(fx_arr_t _fx_g16K_form__all_idks)
FX_EXTERN_C int _fx_M3AstFM7id2idx_Ta2i2RM4id_tRM5loc_t(
   struct _fx_R9Ast__id_t* id_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_Ta2i* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M3AstFM13get_id_prefixi1S(fx_str_t* s_0, int_* fx_result, void* fx_fv);

FX_EXTERN_C int _fx_M3AstFM6id2idxTa2i1RM4id_t(struct _fx_R9Ast__id_t* i_0, struct _fx_Ta2i* fx_result, void* fx_fv);

FX_EXTERN_C_VAL(bool _fx_g15Ast__freeze_ids)
FX_EXTERN_C_VAL(bool _fx_g19K_form__freeze_idks)
FX_EXTERN_C_VAL(struct _fx_R10Ast__loc_t _fx_g10Ast__noloc)
FX_EXTERN_C int _fx_M3AstFM6stringS1RM4id_t(struct _fx_R9Ast__id_t* i_0, fx_str_t* fx_result, void* fx_fv);

FX_EXTERN_C int _fx_M3AstFM11compile_errE2RM5loc_tS(
   struct _fx_R10Ast__loc_t* loc_0,
   fx_str_t* msg_0,
   fx_exn_t* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M3AstFM2ppS1RM4id_t(struct _fx_R9Ast__id_t* i_0, fx_str_t* fx_result, void* fx_fv);

FX_EXTERN_C int _fx_M3AstFM17default_val_flagsRM11val_flags_t0(struct _fx_R16Ast__val_flags_t* fx_result, void* fx_fv);

FX_EXTERN_C int _fx_M3AstFM11loclist2locRM5loc_t2LRM5loc_tRM5loc_t(
   struct _fx_LR10Ast__loc_t_data_t* llist_0,
   struct _fx_R10Ast__loc_t* default_loc_0,
   struct _fx_R10Ast__loc_t* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M6C_formFM9walk_ctypN14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_N14C_form__ctyp_t_data_t** fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M6C_formFM9walk_cexpN14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_N14C_form__cexp_t_data_t** fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M6C_formFM10walk_cstmtN15C_form__cstmt_t2N15C_form__cstmt_tRM9c_callb_t(
   struct _fx_N15C_form__cstmt_t_data_t* s_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result,
   void* fx_fv);

static int _fx_M6C_formFM10walk_ctyp_N14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_N14C_form__ctyp_t_data_t** fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M6K_formFM8KTypNameN14K_form__ktyp_t1R9Ast__id_t(
   struct _fx_R9Ast__id_t* arg0,
   struct _fx_N14K_form__ktyp_t_data_t** fx_result);

FX_EXTERN_C void _fx_M6K_formFM7KLitNilN14K_form__klit_t1N14K_form__ktyp_t(
   struct _fx_N14K_form__ktyp_t_data_t* arg0,
   struct _fx_N14K_form__klit_t* fx_result);

static int _fx_M6C_formFM10walk_cexp_N14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_N14C_form__cexp_t_data_t** fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M6C_formFM7make_fpFPR9Ast__id_t1R9Ast__id_t1RM9c_callb_t(
   struct _fx_R17C_form__c_callb_t* arg0,
   struct _fx_FPR9Ast__id_t1R9Ast__id_t* fx_result);

FX_EXTERN_C int _fx_M6C_formFM7make_fpFPN15C_form__cstmt_t1N15C_form__cstmt_t1RM9c_callb_t(
   struct _fx_R17C_form__c_callb_t* arg0,
   struct _fx_FPN15C_form__cstmt_t1N15C_form__cstmt_t* fx_result);

FX_EXTERN_C int _fx_M6C_formFM7make_fpFPLN15C_form__cstmt_t2LN15C_form__cstmt_tRM9c_callb_t1RM9c_callb_t(
   struct _fx_R17C_form__c_callb_t* arg0,
   struct _fx_FPLN15C_form__cstmt_t2LN15C_form__cstmt_tR17C_form__c_callb_t* fx_result);

static int _fx_M6C_formFM12walk_cexp_1_N14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_N14C_form__cexp_t_data_t** fx_result,
   void* fx_fv);

static int _fx_M6C_formFM14walk_cexp_opt_Nt6option1N14C_form__cexp_t2Nt6option1N14C_form__cexp_tRM9c_callb_t(
   struct _fx_Nt6option1N14C_form__cexp_t* e_opt_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_Nt6option1N14C_form__cexp_t* fx_result,
   void* fx_fv);

static int _fx_M6C_formFM14walk_ctyp_opt_Nt6option1N14C_form__ctyp_t2Nt6option1N14C_form__ctyp_tRM9c_callb_t(
   struct _fx_Nt6option1N14C_form__ctyp_t* t_opt_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_Nt6option1N14C_form__ctyp_t* fx_result,
   void* fx_fv);

static int _fx_M6C_formFM9walk_cel_LN14C_form__cexp_t2LN14C_form__cexp_tRM9c_callb_t(
   struct _fx_LN14C_form__cexp_t_data_t* el_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_LN14C_form__cexp_t_data_t** fx_result,
   void* fx_fv);

static int _fx_M6C_formFM12walk_ctyp_1_N14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_N14C_form__ctyp_t_data_t** fx_result,
   void* fx_fv);

static int _fx_M6C_formFM8walk_id_R9Ast__id_t1R9Ast__id_t(
   struct _fx_R9Ast__id_t* n_0,
   struct _fx_R9Ast__id_t* fx_result,
   void* fx_fv);

static int _fx_M6C_formFM11walk_cstmt_N15C_form__cstmt_t1N15C_form__cstmt_t(
   struct _fx_N15C_form__cstmt_t_data_t* s_0,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result,
   void* fx_fv);

static int _fx_M6C_formFM9walk_csl_LN15C_form__cstmt_t2LN15C_form__cstmt_tRM9c_callb_t(
   struct _fx_LN15C_form__cstmt_t_data_t* sl_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_LN15C_form__cstmt_t_data_t** fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M6C_formFM9fold_ctypv2N14C_form__ctyp_tRM14c_fold_callb_t(
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_R22C_form__c_fold_callb_t* callb_0,
   void* fx_fv);

FX_EXTERN_C int _fx_M6C_formFM9fold_cexpv2N14C_form__cexp_tRM14c_fold_callb_t(
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   struct _fx_R22C_form__c_fold_callb_t* callb_0,
   void* fx_fv);

FX_EXTERN_C int _fx_M6C_formFM10fold_cstmtv2N15C_form__cstmt_tRM14c_fold_callb_t(
   struct _fx_N15C_form__cstmt_t_data_t* s_0,
   struct _fx_R22C_form__c_fold_callb_t* callb_0,
   void* fx_fv);

static int _fx_M6C_formFM10fold_ctyp_v2N14C_form__ctyp_tRM14c_fold_callb_t(
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_R22C_form__c_fold_callb_t* callb_0,
   void* fx_fv);

static int _fx_M6C_formFM10fold_cexp_v2N14C_form__cexp_tRM14c_fold_callb_t(
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   struct _fx_R22C_form__c_fold_callb_t* callb_0,
   void* fx_fv);

FX_EXTERN_C int _fx_M6C_formFM7make_fpFPv1N15C_form__cstmt_t1RM14c_fold_callb_t(
   struct _fx_R22C_form__c_fold_callb_t* arg0,
   struct _fx_FPv1N15C_form__cstmt_t* fx_result);

FX_EXTERN_C int _fx_M6C_formFM7make_fpFPv2LN15C_form__cstmt_tRM14c_fold_callb_t1RM14c_fold_callb_t(
   struct _fx_R22C_form__c_fold_callb_t* arg0,
   struct _fx_FPv2LN15C_form__cstmt_tR22C_form__c_fold_callb_t* fx_result);

FX_EXTERN_C int _fx_M6C_formFM7make_fpFPv1R9Ast__id_t1RM14c_fold_callb_t(
   struct _fx_R22C_form__c_fold_callb_t* arg0,
   struct _fx_FPv1R9Ast__id_t* fx_result);

static int _fx_M6C_formFM14fold_cexp_opt_v2Nt6option1N14C_form__cexp_tRM14c_fold_callb_t(
   struct _fx_Nt6option1N14C_form__cexp_t* e_opt_0,
   struct _fx_R22C_form__c_fold_callb_t* callb_0,
   void* fx_fv);

static int _fx_M6C_formFM12fold_ctyp_1_v2N14C_form__ctyp_tRM14c_fold_callb_t(
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_R22C_form__c_fold_callb_t* callb_0,
   void* fx_fv);

static int _fx_M6C_formFM12fold_cexp_1_v2N14C_form__cexp_tRM14c_fold_callb_t(
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   struct _fx_R22C_form__c_fold_callb_t* callb_0,
   void* fx_fv);

static int _fx_M6C_formFM11fold_cstmt_v1N15C_form__cstmt_t(struct _fx_N15C_form__cstmt_t_data_t* s_0, void* fx_fv);

static int _fx_M6C_formFM9fold_csl_v2LN15C_form__cstmt_tRM14c_fold_callb_t(
   struct _fx_LN15C_form__cstmt_t_data_t* sl_0,
   struct _fx_R22C_form__c_fold_callb_t* callb_0,
   void* fx_fv);

static int _fx_M6C_formFM8fold_id_v1R9Ast__id_t(struct _fx_R9Ast__id_t* n_0, void* fx_fv);

FX_EXTERN_C_VAL(struct _fx_R9Ast__id_t _fx_g9Ast__noid)
FX_EXTERN_C int _fx_F6stringS1i(int_ a, fx_str_t* fx_result, void* fx_fv);

FX_EXTERN_C_VAL(struct _fx_Nt9Dynvec__t1S_data_t* _fx_g14Ast__all_names)
FX_EXTERN_C void _fx_M6K_formFM7KLitIntN14K_form__klit_t1l(int64_t arg0, struct _fx_N14K_form__klit_t* fx_result);

FX_EXTERN_C void _fx_M6K_formFM8KLitBoolN14K_form__klit_t1B(bool arg0, struct _fx_N14K_form__klit_t* fx_result);

typedef struct {
   int_ rc;
   fx_free_t free_f;
   struct _fx_R17C_form__c_callb_t t0;
} _fx_M6C_formFM8walk_id_R9Ast__id_t1R9Ast__id_t_cldata_t;

FX_EXTERN_C void _fx_free_M6C_formFM8walk_id_R9Ast__id_t1R9Ast__id_t(
   _fx_M6C_formFM8walk_id_R9Ast__id_t1R9Ast__id_t_cldata_t* dst)
{
   _fx_free_R17C_form__c_callb_t(&dst->t0);
   fx_free(dst);
}

typedef struct {
   int_ rc;
   fx_free_t free_f;
   struct _fx_R17C_form__c_callb_t t0;
} _fx_M6C_formFM11walk_cstmt_N15C_form__cstmt_t1N15C_form__cstmt_t_cldata_t;

FX_EXTERN_C void _fx_free_M6C_formFM11walk_cstmt_N15C_form__cstmt_t1N15C_form__cstmt_t(
   _fx_M6C_formFM11walk_cstmt_N15C_form__cstmt_t1N15C_form__cstmt_t_cldata_t* dst)
{
   _fx_free_R17C_form__c_callb_t(&dst->t0);
   fx_free(dst);
}

typedef struct {
   int_ rc;
   fx_free_t free_f;
   struct _fx_R17C_form__c_callb_t t0;
} _fx_M6C_formFM9walk_csl_LN15C_form__cstmt_t2LN15C_form__cstmt_tRM9c_callb_t_cldata_t;

FX_EXTERN_C void _fx_free_M6C_formFM9walk_csl_LN15C_form__cstmt_t2LN15C_form__cstmt_tRM9c_callb_t(
   _fx_M6C_formFM9walk_csl_LN15C_form__cstmt_t2LN15C_form__cstmt_tRM9c_callb_t_cldata_t* dst)
{
   _fx_free_R17C_form__c_callb_t(&dst->t0);
   fx_free(dst);
}

typedef struct {
   int_ rc;
   fx_free_t free_f;
   struct _fx_R22C_form__c_fold_callb_t t0;
} _fx_M6C_formFM11fold_cstmt_v1N15C_form__cstmt_t_cldata_t;

FX_EXTERN_C void _fx_free_M6C_formFM11fold_cstmt_v1N15C_form__cstmt_t(
   _fx_M6C_formFM11fold_cstmt_v1N15C_form__cstmt_t_cldata_t* dst)
{
   _fx_free_R22C_form__c_fold_callb_t(&dst->t0);
   fx_free(dst);
}

typedef struct {
   int_ rc;
   fx_free_t free_f;
   struct _fx_R22C_form__c_fold_callb_t t0;
} _fx_M6C_formFM9fold_csl_v2LN15C_form__cstmt_tRM14c_fold_callb_t_cldata_t;

FX_EXTERN_C void _fx_free_M6C_formFM9fold_csl_v2LN15C_form__cstmt_tRM14c_fold_callb_t(
   _fx_M6C_formFM9fold_csl_v2LN15C_form__cstmt_tRM14c_fold_callb_t_cldata_t* dst)
{
   _fx_free_R22C_form__c_fold_callb_t(&dst->t0);
   fx_free(dst);
}

typedef struct {
   int_ rc;
   fx_free_t free_f;
   struct _fx_R22C_form__c_fold_callb_t t0;
} _fx_M6C_formFM8fold_id_v1R9Ast__id_t_cldata_t;

FX_EXTERN_C void _fx_free_M6C_formFM8fold_id_v1R9Ast__id_t(_fx_M6C_formFM8fold_id_v1R9Ast__id_t_cldata_t* dst)
{
   _fx_free_R22C_form__c_fold_callb_t(&dst->t0);
   fx_free(dst);
}

FX_EXTERN_C void _fx_M6C_formFM4SomeNt6option1rRM15cdefinterface_t1rRM15cdefinterface_t(
   struct _fx_rR23C_form__cdefinterface_t_data_t* arg0,
   struct _fx_Nt6option1rR23C_form__cdefinterface_t* fx_result)
{
   fx_result->tag = 2;
   FX_COPY_PTR(arg0, &fx_result->u.Some);
}

FX_EXTERN_C void _fx_M6C_formFM4SomeNt6option1N14C_form__ctyp_t1N14C_form__ctyp_t(
   struct _fx_N14C_form__ctyp_t_data_t* arg0,
   struct _fx_Nt6option1N14C_form__ctyp_t* fx_result)
{
   fx_result->tag = 2;
   FX_COPY_PTR(arg0, &fx_result->u.Some);
}

FX_EXTERN_C void _fx_M6C_formFM4SomeNt6option1N14C_form__cexp_t1N14C_form__cexp_t(
   struct _fx_N14C_form__cexp_t_data_t* arg0,
   struct _fx_Nt6option1N14C_form__cexp_t* fx_result)
{
   fx_result->tag = 2;
   FX_COPY_PTR(arg0, &fx_result->u.Some);
}

FX_EXTERN_C void _fx_M6C_formFM4SomeNt6option1R9Ast__id_t1R9Ast__id_t(
   struct _fx_R9Ast__id_t* arg0,
   struct _fx_Nt6option1R9Ast__id_t* fx_result)
{
   fx_result->tag = 2;
   fx_result->u.Some = *arg0;
}

FX_EXTERN_C int _fx_M6C_formFM3appv2LR9Ast__id_tFPv1R9Ast__id_t(
   struct _fx_LR9Ast__id_t_data_t* l_0,
   struct _fx_FPv1R9Ast__id_t* f_0,
   void* fx_fv)
{
   int fx_status = 0;
   _fx_LR9Ast__id_t lst_0 = l_0;
   for (; lst_0; lst_0 = lst_0->tl) {
      _fx_R9Ast__id_t* x_0 = &lst_0->hd;
      FX_CALL(f_0->fp(x_0, f_0->fcv), _fx_catch_0);

   _fx_catch_0: ;
      FX_CHECK_EXN(_fx_cleanup);
   }

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM3appv2LN15C_form__cstmt_tFPv1N15C_form__cstmt_t(
   struct _fx_LN15C_form__cstmt_t_data_t* l_0,
   struct _fx_FPv1N15C_form__cstmt_t* f_0,
   void* fx_fv)
{
   int fx_status = 0;
   _fx_LN15C_form__cstmt_t lst_0 = l_0;
   for (; lst_0; lst_0 = lst_0->tl) {
      _fx_N15C_form__cstmt_t x_0 = lst_0->hd;
      FX_CALL(f_0->fp(x_0, f_0->fcv), _fx_catch_0);

   _fx_catch_0: ;
      FX_CHECK_EXN(_fx_cleanup);
   }

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM3mapLR9Ast__id_t2LR9Ast__id_tFPR9Ast__id_t1R9Ast__id_t(
   struct _fx_LR9Ast__id_t_data_t* l_0,
   struct _fx_FPR9Ast__id_t1R9Ast__id_t* f_0,
   struct _fx_LR9Ast__id_t_data_t** fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   _fx_LR9Ast__id_t lstend_0 = 0;
   _fx_LR9Ast__id_t lst_0 = l_0;
   for (; lst_0; lst_0 = lst_0->tl) {
      _fx_R9Ast__id_t* x_0 = &lst_0->hd;
      _fx_R9Ast__id_t res_0;
      FX_CALL(f_0->fp(x_0, &res_0, f_0->fcv), _fx_catch_0);
      _fx_LR9Ast__id_t node_0 = 0;
      FX_CALL(_fx_cons_LR9Ast__id_t(&res_0, 0, false, &node_0), _fx_catch_0);
      FX_LIST_APPEND(*fx_result, lstend_0, node_0);

   _fx_catch_0: ;
      FX_CHECK_EXN(_fx_cleanup);
   }

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM3mapLN15C_form__cstmt_t2LN15C_form__cstmt_tFPN15C_form__cstmt_t1N15C_form__cstmt_t(
   struct _fx_LN15C_form__cstmt_t_data_t* l_0,
   struct _fx_FPN15C_form__cstmt_t1N15C_form__cstmt_t* f_0,
   struct _fx_LN15C_form__cstmt_t_data_t** fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   _fx_LN15C_form__cstmt_t lstend_0 = 0;
   _fx_LN15C_form__cstmt_t lst_0 = l_0;
   for (; lst_0; lst_0 = lst_0->tl) {
      _fx_N15C_form__cstmt_t res_0 = 0;
      _fx_N15C_form__cstmt_t x_0 = lst_0->hd;
      FX_CALL(f_0->fp(x_0, &res_0, f_0->fcv), _fx_catch_0);
      _fx_LN15C_form__cstmt_t node_0 = 0;
      FX_CALL(_fx_cons_LN15C_form__cstmt_t(res_0, 0, false, &node_0), _fx_catch_0);
      FX_LIST_APPEND(*fx_result, lstend_0, node_0);

   _fx_catch_0: ;
      if (res_0) {
         _fx_free_N15C_form__cstmt_t(&res_0);
      }
      FX_CHECK_EXN(_fx_cleanup);
   }

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM1tNt9Dynvec__t1N15C_form__cinfo_t3iA1N15C_form__cinfo_tN15C_form__cinfo_t(
   int_ arg0,
   fx_arr_t* arg1,
   struct _fx_N15C_form__cinfo_t* arg2,
   struct _fx_Nt9Dynvec__t1N15C_form__cinfo_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_Nt9Dynvec__t1N15C_form__cinfo_t);
   v->u.t.t0 = arg0;
   fx_copy_arr(arg1, &v->u.t.t1);
   _fx_copy_N15C_form__cinfo_t(arg2, &v->u.t.t2);
   return 0;
}

FX_EXTERN_C void _fx_M6C_formFM6COpCmpN17C_form__cbinary_t1N12Ast__cmpop_t(
   struct _fx_N12Ast__cmpop_t* arg0,
   struct _fx_N17C_form__cbinary_t* fx_result)
{
   fx_result->tag = 13;
   fx_result->u.COpCmp = *arg0;
}

FX_EXTERN_C int _fx_M6C_formFM8CTypSIntN14C_form__ctyp_t1i(int_ arg0, struct _fx_N14C_form__ctyp_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N14C_form__ctyp_t);
   v->tag = 4;
   v->u.CTypSInt = arg0;
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM8CTypUIntN14C_form__ctyp_t1i(int_ arg0, struct _fx_N14C_form__ctyp_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N14C_form__ctyp_t);
   v->tag = 5;
   v->u.CTypUInt = arg0;
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM9CTypFloatN14C_form__ctyp_t1i(int_ arg0, struct _fx_N14C_form__ctyp_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N14C_form__ctyp_t);
   v->tag = 7;
   v->u.CTypFloat = arg0;
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM10CTypStructN14C_form__ctyp_t2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t(
   struct _fx_Nt6option1R9Ast__id_t* arg0,
   struct _fx_LT2R9Ast__id_tN14C_form__ctyp_t_data_t* arg1,
   struct _fx_N14C_form__ctyp_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N14C_form__ctyp_t);
   v->tag = 14;
   v->u.CTypStruct.t0 = *arg0;
   FX_COPY_PTR(arg1, &v->u.CTypStruct.t1);
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM9CTypUnionN14C_form__ctyp_t2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t(
   struct _fx_Nt6option1R9Ast__id_t* arg0,
   struct _fx_LT2R9Ast__id_tN14C_form__ctyp_t_data_t* arg1,
   struct _fx_N14C_form__ctyp_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N14C_form__ctyp_t);
   v->tag = 15;
   v->u.CTypUnion.t0 = *arg0;
   FX_COPY_PTR(arg1, &v->u.CTypUnion.t1);
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM13CTypFunRawPtrN14C_form__ctyp_t2LN14C_form__ctyp_tN14C_form__ctyp_t(
   struct _fx_LN14C_form__ctyp_t_data_t* arg0,
   struct _fx_N14C_form__ctyp_t_data_t* arg1,
   struct _fx_N14C_form__ctyp_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N14C_form__ctyp_t);
   v->tag = 16;
   FX_COPY_PTR(arg0, &v->u.CTypFunRawPtr.t0);
   FX_COPY_PTR(arg1, &v->u.CTypFunRawPtr.t1);
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM10CTypRawPtrN14C_form__ctyp_t2LN19C_form__ctyp_attr_tN14C_form__ctyp_t(
   struct _fx_LN19C_form__ctyp_attr_t_data_t* arg0,
   struct _fx_N14C_form__ctyp_t_data_t* arg1,
   struct _fx_N14C_form__ctyp_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N14C_form__ctyp_t);
   v->tag = 17;
   FX_COPY_PTR(arg0, &v->u.CTypRawPtr.t0);
   FX_COPY_PTR(arg1, &v->u.CTypRawPtr.t1);
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM12CTypRawArrayN14C_form__ctyp_t2LN19C_form__ctyp_attr_tN14C_form__ctyp_t(
   struct _fx_LN19C_form__ctyp_attr_t_data_t* arg0,
   struct _fx_N14C_form__ctyp_t_data_t* arg1,
   struct _fx_N14C_form__ctyp_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N14C_form__ctyp_t);
   v->tag = 18;
   FX_COPY_PTR(arg0, &v->u.CTypRawArray.t0);
   FX_COPY_PTR(arg1, &v->u.CTypRawArray.t1);
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM9CTypArrayN14C_form__ctyp_t2iN14C_form__ctyp_t(
   int_ arg0,
   struct _fx_N14C_form__ctyp_t_data_t* arg1,
   struct _fx_N14C_form__ctyp_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N14C_form__ctyp_t);
   v->tag = 19;
   v->u.CTypArray.t0 = arg0;
   FX_COPY_PTR(arg1, &v->u.CTypArray.t1);
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM10CTypVectorN14C_form__ctyp_t1N14C_form__ctyp_t(
   struct _fx_N14C_form__ctyp_t_data_t* arg0,
   struct _fx_N14C_form__ctyp_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N14C_form__ctyp_t);
   v->tag = 20;
   FX_COPY_PTR(arg0, &v->u.CTypVector);
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM8CTypNameN14C_form__ctyp_t1R9Ast__id_t(
   struct _fx_R9Ast__id_t* arg0,
   struct _fx_N14C_form__ctyp_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N14C_form__ctyp_t);
   v->tag = 21;
   v->u.CTypName = *arg0;
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM9CExpIdentN14C_form__cexp_t2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* arg0,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* arg1,
   struct _fx_N14C_form__cexp_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N14C_form__cexp_t);
   v->tag = 1;
   v->u.CExpIdent.t0 = *arg0;
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(arg1, &v->u.CExpIdent.t1);
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM7CExpLitN14C_form__cexp_t2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N14K_form__klit_t* arg0,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* arg1,
   struct _fx_N14C_form__cexp_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N14C_form__cexp_t);
   v->tag = 2;
   _fx_copy_N14K_form__klit_t(arg0, &v->u.CExpLit.t0);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(arg1, &v->u.CExpLit.t1);
   return 0;
}

FX_EXTERN_C int
   _fx_M6C_formFM10CExpBinaryN14C_form__cexp_t4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N17C_form__cbinary_t* arg0,
   struct _fx_N14C_form__cexp_t_data_t* arg1,
   struct _fx_N14C_form__cexp_t_data_t* arg2,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* arg3,
   struct _fx_N14C_form__cexp_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N14C_form__cexp_t);
   v->tag = 3;
   v->u.CExpBinary.t0 = *arg0;
   FX_COPY_PTR(arg1, &v->u.CExpBinary.t1);
   FX_COPY_PTR(arg2, &v->u.CExpBinary.t2);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(arg3, &v->u.CExpBinary.t3);
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM9CExpUnaryN14C_form__cexp_t3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N16C_form__cunary_t* arg0,
   struct _fx_N14C_form__cexp_t_data_t* arg1,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* arg2,
   struct _fx_N14C_form__cexp_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N14C_form__cexp_t);
   v->tag = 4;
   v->u.CExpUnary.t0 = *arg0;
   FX_COPY_PTR(arg1, &v->u.CExpUnary.t1);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(arg2, &v->u.CExpUnary.t2);
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM7CExpMemN14C_form__cexp_t3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N14C_form__cexp_t_data_t* arg0,
   struct _fx_R9Ast__id_t* arg1,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* arg2,
   struct _fx_N14C_form__cexp_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N14C_form__cexp_t);
   v->tag = 5;
   FX_COPY_PTR(arg0, &v->u.CExpMem.t0);
   v->u.CExpMem.t1 = *arg1;
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(arg2, &v->u.CExpMem.t2);
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM9CExpArrowN14C_form__cexp_t3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N14C_form__cexp_t_data_t* arg0,
   struct _fx_R9Ast__id_t* arg1,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* arg2,
   struct _fx_N14C_form__cexp_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N14C_form__cexp_t);
   v->tag = 6;
   FX_COPY_PTR(arg0, &v->u.CExpArrow.t0);
   v->u.CExpArrow.t1 = *arg1;
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(arg2, &v->u.CExpArrow.t2);
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM8CExpCastN14C_form__cexp_t3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N14C_form__cexp_t_data_t* arg0,
   struct _fx_N14C_form__ctyp_t_data_t* arg1,
   struct _fx_R10Ast__loc_t* arg2,
   struct _fx_N14C_form__cexp_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N14C_form__cexp_t);
   v->tag = 7;
   FX_COPY_PTR(arg0, &v->u.CExpCast.t0);
   FX_COPY_PTR(arg1, &v->u.CExpCast.t1);
   v->u.CExpCast.t2 = *arg2;
   return 0;
}

FX_EXTERN_C int
   _fx_M6C_formFM11CExpTernaryN14C_form__cexp_t4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N14C_form__cexp_t_data_t* arg0,
   struct _fx_N14C_form__cexp_t_data_t* arg1,
   struct _fx_N14C_form__cexp_t_data_t* arg2,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* arg3,
   struct _fx_N14C_form__cexp_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N14C_form__cexp_t);
   v->tag = 8;
   FX_COPY_PTR(arg0, &v->u.CExpTernary.t0);
   FX_COPY_PTR(arg1, &v->u.CExpTernary.t1);
   FX_COPY_PTR(arg2, &v->u.CExpTernary.t2);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(arg3, &v->u.CExpTernary.t3);
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM8CExpCallN14C_form__cexp_t3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N14C_form__cexp_t_data_t* arg0,
   struct _fx_LN14C_form__cexp_t_data_t* arg1,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* arg2,
   struct _fx_N14C_form__cexp_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N14C_form__cexp_t);
   v->tag = 9;
   FX_COPY_PTR(arg0, &v->u.CExpCall.t0);
   FX_COPY_PTR(arg1, &v->u.CExpCall.t1);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(arg2, &v->u.CExpCall.t2);
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM8CExpInitN14C_form__cexp_t2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_LN14C_form__cexp_t_data_t* arg0,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* arg1,
   struct _fx_N14C_form__cexp_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N14C_form__cexp_t);
   v->tag = 10;
   FX_COPY_PTR(arg0, &v->u.CExpInit.t0);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(arg1, &v->u.CExpInit.t1);
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM7CExpTypN14C_form__cexp_t2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N14C_form__ctyp_t_data_t* arg0,
   struct _fx_R10Ast__loc_t* arg1,
   struct _fx_N14C_form__cexp_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N14C_form__cexp_t);
   v->tag = 11;
   FX_COPY_PTR(arg0, &v->u.CExpTyp.t0);
   v->u.CExpTyp.t1 = *arg1;
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM9CExpCCodeN14C_form__cexp_t2SR10Ast__loc_t(
   fx_str_t* arg0,
   struct _fx_R10Ast__loc_t* arg1,
   struct _fx_N14C_form__cexp_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N14C_form__cexp_t);
   v->tag = 12;
   fx_copy_str(arg0, &v->u.CExpCCode.t0);
   v->u.CExpCCode.t1 = *arg1;
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM8CStmtNopN15C_form__cstmt_t1R10Ast__loc_t(
   struct _fx_R10Ast__loc_t* arg0,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N15C_form__cstmt_t);
   v->tag = 1;
   v->u.CStmtNop = *arg0;
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM4CExpN15C_form__cstmt_t1N14C_form__cexp_t(
   struct _fx_N14C_form__cexp_t_data_t* arg0,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N15C_form__cstmt_t);
   v->tag = 3;
   FX_COPY_PTR(arg0, &v->u.CExp);
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM11CStmtReturnN15C_form__cstmt_t2Nt6option1N14C_form__cexp_tR10Ast__loc_t(
   struct _fx_Nt6option1N14C_form__cexp_t* arg0,
   struct _fx_R10Ast__loc_t* arg1,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N15C_form__cstmt_t);
   v->tag = 6;
   _fx_copy_Nt6option1N14C_form__cexp_t(arg0, &v->u.CStmtReturn.t0);
   v->u.CStmtReturn.t1 = *arg1;
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM10CStmtBlockN15C_form__cstmt_t2LN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_LN15C_form__cstmt_t_data_t* arg0,
   struct _fx_R10Ast__loc_t* arg1,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N15C_form__cstmt_t);
   v->tag = 7;
   FX_COPY_PTR(arg0, &v->u.CStmtBlock.t0);
   v->u.CStmtBlock.t1 = *arg1;
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM9CStmtSyncN15C_form__cstmt_t2R9Ast__id_tN15C_form__cstmt_t(
   struct _fx_R9Ast__id_t* arg0,
   struct _fx_N15C_form__cstmt_t_data_t* arg1,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N15C_form__cstmt_t);
   v->tag = 8;
   v->u.CStmtSync.t0 = *arg0;
   FX_COPY_PTR(arg1, &v->u.CStmtSync.t1);
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM7CStmtIfN15C_form__cstmt_t4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_N14C_form__cexp_t_data_t* arg0,
   struct _fx_N15C_form__cstmt_t_data_t* arg1,
   struct _fx_N15C_form__cstmt_t_data_t* arg2,
   struct _fx_R10Ast__loc_t* arg3,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N15C_form__cstmt_t);
   v->tag = 9;
   FX_COPY_PTR(arg0, &v->u.CStmtIf.t0);
   FX_COPY_PTR(arg1, &v->u.CStmtIf.t1);
   FX_COPY_PTR(arg2, &v->u.CStmtIf.t2);
   v->u.CStmtIf.t3 = *arg3;
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM9CStmtGotoN15C_form__cstmt_t2R9Ast__id_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* arg0,
   struct _fx_R10Ast__loc_t* arg1,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N15C_form__cstmt_t);
   v->tag = 10;
   v->u.CStmtGoto.t0 = *arg0;
   v->u.CStmtGoto.t1 = *arg1;
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM10CStmtLabelN15C_form__cstmt_t2R9Ast__id_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* arg0,
   struct _fx_R10Ast__loc_t* arg1,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N15C_form__cstmt_t);
   v->tag = 11;
   v->u.CStmtLabel.t0 = *arg0;
   v->u.CStmtLabel.t1 = *arg1;
   return 0;
}

FX_EXTERN_C int
   _fx_M6C_formFM8CStmtForN15C_form__cstmt_t6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_Nt6option1N14C_form__ctyp_t* arg0,
   struct _fx_LN14C_form__cexp_t_data_t* arg1,
   struct _fx_Nt6option1N14C_form__cexp_t* arg2,
   struct _fx_LN14C_form__cexp_t_data_t* arg3,
   struct _fx_N15C_form__cstmt_t_data_t* arg4,
   struct _fx_R10Ast__loc_t* arg5,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N15C_form__cstmt_t);
   v->tag = 12;
   _fx_copy_Nt6option1N14C_form__ctyp_t(arg0, &v->u.CStmtFor.t0);
   FX_COPY_PTR(arg1, &v->u.CStmtFor.t1);
   _fx_copy_Nt6option1N14C_form__cexp_t(arg2, &v->u.CStmtFor.t2);
   FX_COPY_PTR(arg3, &v->u.CStmtFor.t3);
   FX_COPY_PTR(arg4, &v->u.CStmtFor.t4);
   v->u.CStmtFor.t5 = *arg5;
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM10CStmtWhileN15C_form__cstmt_t3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_N14C_form__cexp_t_data_t* arg0,
   struct _fx_N15C_form__cstmt_t_data_t* arg1,
   struct _fx_R10Ast__loc_t* arg2,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N15C_form__cstmt_t);
   v->tag = 13;
   FX_COPY_PTR(arg0, &v->u.CStmtWhile.t0);
   FX_COPY_PTR(arg1, &v->u.CStmtWhile.t1);
   v->u.CStmtWhile.t2 = *arg2;
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM12CStmtDoWhileN15C_form__cstmt_t3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t(
   struct _fx_N15C_form__cstmt_t_data_t* arg0,
   struct _fx_N14C_form__cexp_t_data_t* arg1,
   struct _fx_R10Ast__loc_t* arg2,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N15C_form__cstmt_t);
   v->tag = 14;
   FX_COPY_PTR(arg0, &v->u.CStmtDoWhile.t0);
   FX_COPY_PTR(arg1, &v->u.CStmtDoWhile.t1);
   v->u.CStmtDoWhile.t2 = *arg2;
   return 0;
}

FX_EXTERN_C int
   _fx_M6C_formFM11CStmtSwitchN15C_form__cstmt_t3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_N14C_form__cexp_t_data_t* arg0,
   struct _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t_data_t* arg1,
   struct _fx_R10Ast__loc_t* arg2,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N15C_form__cstmt_t);
   v->tag = 15;
   FX_COPY_PTR(arg0, &v->u.CStmtSwitch.t0);
   FX_COPY_PTR(arg1, &v->u.CStmtSwitch.t1);
   v->u.CStmtSwitch.t2 = *arg2;
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM7CDefValN15C_form__cstmt_t4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t(
   struct _fx_N14C_form__ctyp_t_data_t* arg0,
   struct _fx_R9Ast__id_t* arg1,
   struct _fx_Nt6option1N14C_form__cexp_t* arg2,
   struct _fx_R10Ast__loc_t* arg3,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N15C_form__cstmt_t);
   v->tag = 16;
   FX_COPY_PTR(arg0, &v->u.CDefVal.t0);
   v->u.CDefVal.t1 = *arg1;
   _fx_copy_Nt6option1N14C_form__cexp_t(arg2, &v->u.CDefVal.t2);
   v->u.CDefVal.t3 = *arg3;
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM7CDefFunN15C_form__cstmt_t1rRM9cdeffun_t(
   struct _fx_rR17C_form__cdeffun_t_data_t* arg0,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N15C_form__cstmt_t);
   v->tag = 17;
   FX_COPY_PTR(arg0, &v->u.CDefFun);
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM7CDefTypN15C_form__cstmt_t1rRM9cdeftyp_t(
   struct _fx_rR17C_form__cdeftyp_t_data_t* arg0,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N15C_form__cstmt_t);
   v->tag = 18;
   FX_COPY_PTR(arg0, &v->u.CDefTyp);
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM14CDefForwardSymN15C_form__cstmt_t2R9Ast__id_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* arg0,
   struct _fx_R10Ast__loc_t* arg1,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N15C_form__cstmt_t);
   v->tag = 19;
   v->u.CDefForwardSym.t0 = *arg0;
   v->u.CDefForwardSym.t1 = *arg1;
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM14CDefForwardTypN15C_form__cstmt_t2R9Ast__id_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* arg0,
   struct _fx_R10Ast__loc_t* arg1,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N15C_form__cstmt_t);
   v->tag = 20;
   v->u.CDefForwardTyp.t0 = *arg0;
   v->u.CDefForwardTyp.t1 = *arg1;
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM13CDefInterfaceN15C_form__cstmt_t1rRM15cdefinterface_t(
   struct _fx_rR23C_form__cdefinterface_t_data_t* arg0,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N15C_form__cstmt_t);
   v->tag = 22;
   FX_COPY_PTR(arg0, &v->u.CDefInterface);
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM11CMacroUndefN15C_form__cstmt_t2R9Ast__id_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* arg0,
   struct _fx_R10Ast__loc_t* arg1,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N15C_form__cstmt_t);
   v->tag = 24;
   v->u.CMacroUndef.t0 = *arg0;
   v->u.CMacroUndef.t1 = *arg1;
   return 0;
}

FX_EXTERN_C int
   _fx_M6C_formFM8CMacroIfN15C_form__cstmt_t3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t_data_t* arg0,
   struct _fx_LN15C_form__cstmt_t_data_t* arg1,
   struct _fx_R10Ast__loc_t* arg2,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N15C_form__cstmt_t);
   v->tag = 25;
   FX_COPY_PTR(arg0, &v->u.CMacroIf.t0);
   FX_COPY_PTR(arg1, &v->u.CMacroIf.t1);
   v->u.CMacroIf.t2 = *arg2;
   return 0;
}

FX_EXTERN_C int _fx_M6C_formFM12CMacroPragmaN15C_form__cstmt_t2SR10Ast__loc_t(
   fx_str_t* arg0,
   struct _fx_R10Ast__loc_t* arg1,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_N15C_form__cstmt_t);
   v->tag = 27;
   fx_copy_str(arg0, &v->u.CMacroPragma.t0);
   v->u.CMacroPragma.t1 = *arg1;
   return 0;
}

FX_EXTERN_C void _fx_M6C_formFM4CValN15C_form__cinfo_t1RM9cdefval_t(
   struct _fx_R17C_form__cdefval_t* arg0,
   struct _fx_N15C_form__cinfo_t* fx_result)
{
   fx_result->tag = 2;
   _fx_copy_R17C_form__cdefval_t(arg0, &fx_result->u.CVal);
}

FX_EXTERN_C void _fx_M6C_formFM4CFunN15C_form__cinfo_t1rRM9cdeffun_t(
   struct _fx_rR17C_form__cdeffun_t_data_t* arg0,
   struct _fx_N15C_form__cinfo_t* fx_result)
{
   fx_result->tag = 3;
   FX_COPY_PTR(arg0, &fx_result->u.CFun);
}

FX_EXTERN_C void _fx_M6C_formFM4CTypN15C_form__cinfo_t1rRM9cdeftyp_t(
   struct _fx_rR17C_form__cdeftyp_t_data_t* arg0,
   struct _fx_N15C_form__cinfo_t* fx_result)
{
   fx_result->tag = 4;
   FX_COPY_PTR(arg0, &fx_result->u.CTyp);
}

FX_EXTERN_C void _fx_M6C_formFM4CExnN15C_form__cinfo_t1rRM9cdefexn_t(
   struct _fx_rR17C_form__cdefexn_t_data_t* arg0,
   struct _fx_N15C_form__cinfo_t* fx_result)
{
   fx_result->tag = 5;
   FX_COPY_PTR(arg0, &fx_result->u.CExn);
}

FX_EXTERN_C void _fx_M6C_formFM10CInterfaceN15C_form__cinfo_t1rRM15cdefinterface_t(
   struct _fx_rR23C_form__cdefinterface_t_data_t* arg0,
   struct _fx_N15C_form__cinfo_t* fx_result)
{
   fx_result->tag = 6;
   FX_COPY_PTR(arg0, &fx_result->u.CInterface);
}

FX_EXTERN_C void _fx_M6C_formFM6CLabelN15C_form__cinfo_t1RM11cdeflabel_t(
   struct _fx_R19C_form__cdeflabel_t* arg0,
   struct _fx_N15C_form__cinfo_t* fx_result)
{
   fx_result->tag = 8;
   _fx_copy_R19C_form__cdeflabel_t(arg0, &fx_result->u.CLabel);
}

FX_EXTERN_C void _fx_M6C_formFM6CMacroN15C_form__cinfo_t1rRM11cdefmacro_t(
   struct _fx_rR19C_form__cdefmacro_t_data_t* arg0,
   struct _fx_N15C_form__cinfo_t* fx_result)
{
   fx_result->tag = 9;
   FX_COPY_PTR(arg0, &fx_result->u.CMacro);
}

FX_EXTERN_C int _fx_M6C_formFM11new_idc_idxi1i(int_ m_idx_0, int_* fx_result, void* fx_fv)
{
   fx_exn_t v_0 = {0};
   _fx_Nt9Dynvec__t1N14Ast__id_info_t v_1 = 0;
   fx_arr_t v_2 = {0};
   fx_arr_t old_data_0 = {0};
   _fx_N14Ast__id_info_t val0_0 = {0};
   fx_arr_t new_data_0 = {0};
   _fx_Nt9Dynvec__t1N15K_form__kinfo_t v_3 = 0;
   fx_arr_t v_4 = {0};
   fx_arr_t old_data_1 = {0};
   _fx_N15K_form__kinfo_t val0_1 = {0};
   fx_arr_t new_data_1 = {0};
   _fx_Nt9Dynvec__t1N15C_form__cinfo_t v_5 = 0;
   fx_arr_t v_6 = {0};
   fx_arr_t old_data_2 = {0};
   _fx_N15C_form__cinfo_t val0_2 = {0};
   fx_arr_t new_data_2 = {0};
   fx_exn_t v_7 = {0};
   int fx_status = 0;
   if (_fx_g19C_form__freeze_idcs) {
      fx_str_t slit_0 = FX_MAKE_STR("internal error: attempt to add new idc when they are frozen");
      FX_CALL(_fx_F9make_FailE1S(&slit_0, &v_0), _fx_cleanup);
      FX_THROW(&v_0, true, _fx_cleanup);
   }
   FX_CHKIDX(FX_CHKIDX1(_fx_g16Ast__all_modules, 0, m_idx_0), _fx_cleanup);
   FX_COPY_PTR((*FX_PTR_1D(_fx_N16Ast__defmodule_t, _fx_g16Ast__all_modules, m_idx_0))->u.defmodule_t.t9, &v_1);
   fx_copy_arr(&v_1->u.t.t1, &v_2);
   int_ sz_0 = FX_ARR_SIZE(v_2, 0);
   int_ n0_0 = v_1->u.t.t0;
   if (sz_0 <= n0_0) {
      int_ n1_0 = fx_maxi(n0_0, 128) * 2;
      fx_copy_arr(&v_1->u.t.t1, &old_data_0);
      _fx_copy_N14Ast__id_info_t(&v_1->u.t.t2, &val0_0);
      _fx_N14Ast__id_info_t* dstptr_0 = 0;
      {
         const int_ shape_0[] = { n1_0 };
         FX_CALL(
            fx_make_arr(1, shape_0, sizeof(_fx_N14Ast__id_info_t), (fx_free_t)_fx_free_N14Ast__id_info_t,
               (fx_copy_t)_fx_copy_N14Ast__id_info_t, 0, &new_data_0), _fx_cleanup);
      }
      dstptr_0 = (_fx_N14Ast__id_info_t*)new_data_0.data;
      for (int_ i_0 = 0; i_0 < n1_0; i_0++, dstptr_0++) {
         _fx_N14Ast__id_info_t t_0 = {0};
         if (i_0 < n0_0) {
            FX_CHKIDX(FX_CHKIDX1(old_data_0, 0, i_0), _fx_catch_0);
            _fx_copy_N14Ast__id_info_t(FX_PTR_1D(_fx_N14Ast__id_info_t, old_data_0, i_0), &t_0);
         }
         else {
            _fx_copy_N14Ast__id_info_t(&val0_0, &t_0);
         }
         _fx_copy_N14Ast__id_info_t(&t_0, dstptr_0);

      _fx_catch_0: ;
         _fx_free_N14Ast__id_info_t(&t_0);
         FX_CHECK_EXN(_fx_cleanup);
      }
      fx_arr_t* v_8 = &v_1->u.t.t1;
      FX_FREE_ARR(v_8);
      fx_copy_arr(&new_data_0, v_8);
   }
   v_1->u.t.t0 = n0_0 + 1;
   FX_CHKIDX(FX_CHKIDX1(_fx_g16K_form__all_idks, 0, m_idx_0), _fx_cleanup);
   FX_COPY_PTR(*FX_PTR_1D(_fx_Nt9Dynvec__t1N15K_form__kinfo_t, _fx_g16K_form__all_idks, m_idx_0), &v_3);
   fx_copy_arr(&v_3->u.t.t1, &v_4);
   int_ sz_1 = FX_ARR_SIZE(v_4, 0);
   int_ n0_1 = v_3->u.t.t0;
   if (sz_1 <= n0_1) {
      int_ n1_1 = fx_maxi(n0_1, 128) * 2;
      fx_copy_arr(&v_3->u.t.t1, &old_data_1);
      _fx_copy_N15K_form__kinfo_t(&v_3->u.t.t2, &val0_1);
      _fx_N15K_form__kinfo_t* dstptr_1 = 0;
      {
         const int_ shape_1[] = { n1_1 };
         FX_CALL(
            fx_make_arr(1, shape_1, sizeof(_fx_N15K_form__kinfo_t), (fx_free_t)_fx_free_N15K_form__kinfo_t,
               (fx_copy_t)_fx_copy_N15K_form__kinfo_t, 0, &new_data_1), _fx_cleanup);
      }
      dstptr_1 = (_fx_N15K_form__kinfo_t*)new_data_1.data;
      for (int_ i_1 = 0; i_1 < n1_1; i_1++, dstptr_1++) {
         _fx_N15K_form__kinfo_t t_1 = {0};
         if (i_1 < n0_1) {
            FX_CHKIDX(FX_CHKIDX1(old_data_1, 0, i_1), _fx_catch_1);
            _fx_copy_N15K_form__kinfo_t(FX_PTR_1D(_fx_N15K_form__kinfo_t, old_data_1, i_1), &t_1);
         }
         else {
            _fx_copy_N15K_form__kinfo_t(&val0_1, &t_1);
         }
         _fx_copy_N15K_form__kinfo_t(&t_1, dstptr_1);

      _fx_catch_1: ;
         _fx_free_N15K_form__kinfo_t(&t_1);
         FX_CHECK_EXN(_fx_cleanup);
      }
      fx_arr_t* v_9 = &v_3->u.t.t1;
      FX_FREE_ARR(v_9);
      fx_copy_arr(&new_data_1, v_9);
   }
   v_3->u.t.t0 = n0_1 + 1;
   FX_CHKIDX(FX_CHKIDX1(_fx_g16C_form__all_idcs, 0, m_idx_0), _fx_cleanup);
   FX_COPY_PTR(*FX_PTR_1D(_fx_Nt9Dynvec__t1N15C_form__cinfo_t, _fx_g16C_form__all_idcs, m_idx_0), &v_5);
   fx_copy_arr(&v_5->u.t.t1, &v_6);
   int_ sz_2 = FX_ARR_SIZE(v_6, 0);
   int_ n0_2 = v_5->u.t.t0;
   if (sz_2 <= n0_2) {
      int_ n1_2 = fx_maxi(n0_2, 128) * 2;
      fx_copy_arr(&v_5->u.t.t1, &old_data_2);
      _fx_copy_N15C_form__cinfo_t(&v_5->u.t.t2, &val0_2);
      _fx_N15C_form__cinfo_t* dstptr_2 = 0;
      {
         const int_ shape_2[] = { n1_2 };
         FX_CALL(
            fx_make_arr(1, shape_2, sizeof(_fx_N15C_form__cinfo_t), (fx_free_t)_fx_free_N15C_form__cinfo_t,
               (fx_copy_t)_fx_copy_N15C_form__cinfo_t, 0, &new_data_2), _fx_cleanup);
      }
      dstptr_2 = (_fx_N15C_form__cinfo_t*)new_data_2.data;
      for (int_ i_2 = 0; i_2 < n1_2; i_2++, dstptr_2++) {
         _fx_N15C_form__cinfo_t t_2 = {0};
         if (i_2 < n0_2) {
            FX_CHKIDX(FX_CHKIDX1(old_data_2, 0, i_2), _fx_catch_2);
            _fx_copy_N15C_form__cinfo_t(FX_PTR_1D(_fx_N15C_form__cinfo_t, old_data_2, i_2), &t_2);
         }
         else {
            _fx_copy_N15C_form__cinfo_t(&val0_2, &t_2);
         }
         _fx_copy_N15C_form__cinfo_t(&t_2, dstptr_2);

      _fx_catch_2: ;
         _fx_free_N15C_form__cinfo_t(&t_2);
         FX_CHECK_EXN(_fx_cleanup);
      }
      fx_arr_t* v_10 = &v_5->u.t.t1;
      FX_FREE_ARR(v_10);
      fx_copy_arr(&new_data_2, v_10);
   }
   v_5->u.t.t0 = n0_2 + 1;
   bool t_3;
   if (n0_0 == n0_1) {
      t_3 = n0_0 == n0_2;
   }
   else {
      t_3 = false;
   }
   if (t_3) {
      *fx_result = n0_0;
   }
   else {
      fx_str_t slit_1 =
         FX_MAKE_STR("internal error: unsynchronized outputs from new_id_idx(), new_idk_idx() and new_idc_idx()");
      FX_CALL(_fx_F9make_FailE1S(&slit_1, &v_7), _fx_cleanup);
      FX_THROW(&v_7, true, _fx_cleanup);
   }

_fx_cleanup: ;
   fx_free_exn(&v_0);
   if (v_1) {
      _fx_free_Nt9Dynvec__t1N14Ast__id_info_t(&v_1);
   }
   FX_FREE_ARR(&v_2);
   FX_FREE_ARR(&old_data_0);
   _fx_free_N14Ast__id_info_t(&val0_0);
   FX_FREE_ARR(&new_data_0);
   if (v_3) {
      _fx_free_Nt9Dynvec__t1N15K_form__kinfo_t(&v_3);
   }
   FX_FREE_ARR(&v_4);
   FX_FREE_ARR(&old_data_1);
   _fx_free_N15K_form__kinfo_t(&val0_1);
   FX_FREE_ARR(&new_data_1);
   if (v_5) {
      _fx_free_Nt9Dynvec__t1N15C_form__cinfo_t(&v_5);
   }
   FX_FREE_ARR(&v_6);
   FX_FREE_ARR(&old_data_2);
   _fx_free_N15C_form__cinfo_t(&val0_2);
   FX_FREE_ARR(&new_data_2);
   fx_free_exn(&v_7);
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM6cinfo_N15C_form__cinfo_t2R9Ast__id_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* i_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_N15C_form__cinfo_t* fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   _fx_Ta2i v_0;
   FX_CALL(_fx_M3AstFM7id2idx_Ta2i2RM4id_tRM5loc_t(i_0, loc_0, &v_0, 0), _fx_cleanup);
   int_ m_0 = v_0.t0;
   int_ j_0 = v_0.t1;
   FX_CHKIDX(FX_CHKIDX1(_fx_g16C_form__all_idcs, 0, m_0), _fx_cleanup);
   FX_CHKIDX(FX_CHKIDX1((*FX_PTR_1D(_fx_Nt9Dynvec__t1N15C_form__cinfo_t, _fx_g16C_form__all_idcs, m_0))->u.t.t1, 0, j_0),
      _fx_cleanup);
   _fx_copy_N15C_form__cinfo_t(
      FX_PTR_1D(_fx_N15C_form__cinfo_t, (*FX_PTR_1D(_fx_Nt9Dynvec__t1N15C_form__cinfo_t, _fx_g16C_form__all_idcs, m_0))->u.t.t1,
         j_0), fx_result);

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM7gen_idcR9Ast__id_t2iS(
   int_ m_idx_0,
   fx_str_t* s_0,
   struct _fx_R9Ast__id_t* fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   int_ i_0;
   FX_CALL(_fx_M3AstFM13get_id_prefixi1S(s_0, &i_0, 0), _fx_cleanup);
   int_ j_0;
   FX_CALL(_fx_M6C_formFM11new_idc_idxi1i(m_idx_0, &j_0, 0), _fx_cleanup);
   _fx_R9Ast__id_t rec_0 = { m_idx_0, i_0, j_0 };
   *fx_result = rec_0;

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM7dup_idcR9Ast__id_t2iR9Ast__id_t(
   int_ m_idx_0,
   struct _fx_R9Ast__id_t* old_id_0,
   struct _fx_R9Ast__id_t* fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   int_ v_0;
   FX_CALL(_fx_M6C_formFM11new_idc_idxi1i(m_idx_0, &v_0, 0), _fx_cleanup);
   _fx_R9Ast__id_t rec_0 = { m_idx_0, old_id_0->i, v_0 };
   *fx_result = rec_0;

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM13set_idc_entryv2R9Ast__id_tN15C_form__cinfo_t(
   struct _fx_R9Ast__id_t* i_0,
   struct _fx_N15C_form__cinfo_t* entry_0,
   void* fx_fv)
{
   int fx_status = 0;
   _fx_Ta2i v_0;
   FX_CALL(_fx_M3AstFM6id2idxTa2i1RM4id_t(i_0, &v_0, 0), _fx_cleanup);
   int_ m_0 = v_0.t0;
   int_ j_0 = v_0.t1;
   FX_CHKIDX(FX_CHKIDX1(_fx_g16C_form__all_idcs, 0, m_0), _fx_cleanup);
   FX_CHKIDX(FX_CHKIDX1((*FX_PTR_1D(_fx_Nt9Dynvec__t1N15C_form__cinfo_t, _fx_g16C_form__all_idcs, m_0))->u.t.t1, 0, j_0),
      _fx_cleanup);
   _fx_N15C_form__cinfo_t* v_1 =
      FX_PTR_1D(_fx_N15C_form__cinfo_t, (*FX_PTR_1D(_fx_Nt9Dynvec__t1N15C_form__cinfo_t, _fx_g16C_form__all_idcs, m_0))->u.t.t1,
         j_0);
   _fx_free_N15C_form__cinfo_t(v_1);
   _fx_copy_N15C_form__cinfo_t(entry_0, v_1);

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM13init_all_idcsv0(void* fx_fv)
{
   fx_arr_t v_0 = {0};
   int fx_status = 0;
   _fx_g15Ast__freeze_ids = true;
   _fx_g19K_form__freeze_idks = true;
   _fx_g19C_form__freeze_idcs = false;
   _fx_Nt9Dynvec__t1N15C_form__cinfo_t* dstptr_0 = 0;
   int_ ni_0 = FX_ARR_SIZE(_fx_g16K_form__all_idks, 0);
   _fx_Nt9Dynvec__t1N15K_form__kinfo_t* ptr_all_idks_0 =
      FX_PTR_1D(_fx_Nt9Dynvec__t1N15K_form__kinfo_t, _fx_g16K_form__all_idks, 0);
   {
      const int_ shape_0[] = { ni_0 };
      FX_CALL(
         fx_make_arr(1, shape_0, sizeof(_fx_Nt9Dynvec__t1N15C_form__cinfo_t),
            (fx_free_t)_fx_free_Nt9Dynvec__t1N15C_form__cinfo_t, (fx_copy_t)fx_copy_ptr, 0, &v_0), _fx_cleanup);
   }
   dstptr_0 = (_fx_Nt9Dynvec__t1N15C_form__cinfo_t*)v_0.data;
   for (int_ i_0 = 0; i_0 < ni_0; i_0++, dstptr_0++) {
      _fx_Nt9Dynvec__t1N15K_form__kinfo_t k_0 = 0;
      fx_arr_t v_1 = {0};
      _fx_Nt9Dynvec__t1N15C_form__cinfo_t res_0 = 0;
      FX_COPY_PTR(ptr_all_idks_0[i_0], &k_0);
      int_ v_2 = k_0->u.t.t0;
      _fx_N15C_form__cinfo_t* dstptr_1 = 0;
      {
         const int_ shape_1[] = { v_2 };
         FX_CALL(
            fx_make_arr(1, shape_1, sizeof(_fx_N15C_form__cinfo_t), (fx_free_t)_fx_free_N15C_form__cinfo_t,
               (fx_copy_t)_fx_copy_N15C_form__cinfo_t, 0, &v_1), _fx_catch_0);
      }
      dstptr_1 = (_fx_N15C_form__cinfo_t*)v_1.data;
      for (int_ i_1 = 0; i_1 < v_2; i_1++, dstptr_1++) {
         _fx_copy_N15C_form__cinfo_t(&_fx_g13C_form__CNone, dstptr_1);
      }
      FX_CALL(
         _fx_M6C_formFM1tNt9Dynvec__t1N15C_form__cinfo_t3iA1N15C_form__cinfo_tN15C_form__cinfo_t(v_2, &v_1,
            &_fx_g13C_form__CNone, &res_0), _fx_catch_0);
      FX_COPY_PTR(res_0, dstptr_0);

   _fx_catch_0: ;
      if (res_0) {
         _fx_free_Nt9Dynvec__t1N15C_form__cinfo_t(&res_0);
      }
      FX_FREE_ARR(&v_1);
      if (k_0) {
         _fx_free_Nt9Dynvec__t1N15K_form__kinfo_t(&k_0);
      }
      FX_CHECK_EXN(_fx_cleanup);
   }
   FX_FREE_ARR(&_fx_g16C_form__all_idcs);
   fx_copy_arr(&v_0, &_fx_g16C_form__all_idcs);

_fx_cleanup: ;
   FX_FREE_ARR(&v_0);
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM12get_cexp_ctxT2N14C_form__ctyp_tR10Ast__loc_t1N14C_form__cexp_t(
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   int tag_0 = FX_REC_VARIANT_TAG(e_0);
   if (tag_0 == 1) {
      _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&e_0->u.CExpIdent.t1, fx_result);
   }
   else if (tag_0 == 2) {
      _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&e_0->u.CExpLit.t1, fx_result);
   }
   else if (tag_0 == 3) {
      _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&e_0->u.CExpBinary.t3, fx_result);
   }
   else if (tag_0 == 4) {
      _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&e_0->u.CExpUnary.t2, fx_result);
   }
   else if (tag_0 == 5) {
      _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&e_0->u.CExpMem.t2, fx_result);
   }
   else if (tag_0 == 6) {
      _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&e_0->u.CExpArrow.t2, fx_result);
   }
   else if (tag_0 == 7) {
      _fx_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t* vcase_0 = &e_0->u.CExpCast;
      _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(vcase_0->t1, &vcase_0->t2, fx_result);
   }
   else if (tag_0 == 8) {
      _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&e_0->u.CExpTernary.t3, fx_result);
   }
   else if (tag_0 == 9) {
      _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&e_0->u.CExpCall.t2, fx_result);
   }
   else if (tag_0 == 10) {
      _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&e_0->u.CExpInit.t1, fx_result);
   }
   else if (tag_0 == 11) {
      _fx_T2N14C_form__ctyp_tR10Ast__loc_t* vcase_1 = &e_0->u.CExpTyp;
      _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(vcase_1->t0, &vcase_1->t1, fx_result);
   }
   else if (tag_0 == 12) {
      _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(_fx_g15C_form__CTypAny, &e_0->u.CExpCCode.t1, fx_result);
   }
   else {
      FX_FAST_THROW(FX_EXN_NoMatchError, _fx_cleanup);
   }

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM12get_cexp_typN14C_form__ctyp_t1N14C_form__cexp_t(
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   struct _fx_N14C_form__ctyp_t_data_t** fx_result,
   void* fx_fv)
{
   _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_0 = {0};
   int fx_status = 0;
   FX_CALL(_fx_M6C_formFM12get_cexp_ctxT2N14C_form__ctyp_tR10Ast__loc_t1N14C_form__cexp_t(e_0, &v_0, 0), _fx_cleanup);
   FX_COPY_PTR(v_0.t0, fx_result);

_fx_cleanup: ;
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_0);
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM12get_cexp_locR10Ast__loc_t1N14C_form__cexp_t(
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   struct _fx_R10Ast__loc_t* fx_result,
   void* fx_fv)
{
   _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_0 = {0};
   int fx_status = 0;
   FX_CALL(_fx_M6C_formFM12get_cexp_ctxT2N14C_form__ctyp_tR10Ast__loc_t1N14C_form__cexp_t(e_0, &v_0, 0), _fx_cleanup);
   *fx_result = v_0.t1;

_fx_cleanup: ;
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_0);
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM13get_cstmt_locR10Ast__loc_t1N15C_form__cstmt_t(
   struct _fx_N15C_form__cstmt_t_data_t* s_0,
   struct _fx_R10Ast__loc_t* fx_result,
   void* fx_fv)
{
   _fx_N15C_form__cstmt_t s_1 = 0;
   int fx_status = 0;
   _fx_R10Ast__loc_t result_0 = {0};
   FX_COPY_PTR(s_0, &s_1);
   for (;;) {
      _fx_N15C_form__cstmt_t s_2 = 0;
      FX_COPY_PTR(s_1, &s_2);
      int tag_0 = FX_REC_VARIANT_TAG(s_2);
      if (tag_0 == 1) {
         result_0 = s_2->u.CStmtNop; FX_BREAK(_fx_catch_0);  _fx_catch_0: ;
      }
      else if (tag_0 == 2) {
         result_0 = s_2->u.CComment.t1; FX_BREAK(_fx_catch_1);  _fx_catch_1: ;
      }
      else if (tag_0 == 3) {
         _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_0 = {0};
         FX_CALL(_fx_M6C_formFM12get_cexp_ctxT2N14C_form__ctyp_tR10Ast__loc_t1N14C_form__cexp_t(s_2->u.CExp, &v_0, 0),
            _fx_catch_2);
         _fx_R10Ast__loc_t result_1 = v_0.t1;
         result_0 = result_1;
         FX_BREAK(_fx_catch_2);

      _fx_catch_2: ;
         _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_0);
      }
      else if (tag_0 == 4) {
         result_0 = s_2->u.CStmtBreak; FX_BREAK(_fx_catch_3);  _fx_catch_3: ;
      }
      else if (tag_0 == 5) {
         result_0 = s_2->u.CStmtContinue; FX_BREAK(_fx_catch_4);  _fx_catch_4: ;
      }
      else if (tag_0 == 6) {
         result_0 = s_2->u.CStmtReturn.t1; FX_BREAK(_fx_catch_5);  _fx_catch_5: ;
      }
      else if (tag_0 == 7) {
         result_0 = s_2->u.CStmtBlock.t1; FX_BREAK(_fx_catch_6);  _fx_catch_6: ;
      }
      else if (tag_0 == 8) {
         _fx_N15C_form__cstmt_t* s_3 = &s_2->u.CStmtSync.t1; _fx_free_N15C_form__cstmt_t(&s_1); FX_COPY_PTR(*s_3, &s_1);
      }
      else if (tag_0 == 9) {
         result_0 = s_2->u.CStmtIf.t3; FX_BREAK(_fx_catch_7);  _fx_catch_7: ;
      }
      else if (tag_0 == 10) {
         result_0 = s_2->u.CStmtGoto.t1; FX_BREAK(_fx_catch_8);  _fx_catch_8: ;
      }
      else if (tag_0 == 11) {
         result_0 = s_2->u.CStmtLabel.t1; FX_BREAK(_fx_catch_9);  _fx_catch_9: ;
      }
      else if (tag_0 == 12) {
         result_0 = s_2->u.CStmtFor.t5; FX_BREAK(_fx_catch_10);  _fx_catch_10: ;
      }
      else if (tag_0 == 13) {
         result_0 = s_2->u.CStmtWhile.t2; FX_BREAK(_fx_catch_11);  _fx_catch_11: ;
      }
      else if (tag_0 == 14) {
         result_0 = s_2->u.CStmtDoWhile.t2; FX_BREAK(_fx_catch_12);  _fx_catch_12: ;
      }
      else if (tag_0 == 15) {
         result_0 = s_2->u.CStmtSwitch.t2; FX_BREAK(_fx_catch_13);  _fx_catch_13: ;
      }
      else if (tag_0 == 16) {
         result_0 = s_2->u.CDefVal.t3; FX_BREAK(_fx_catch_14);  _fx_catch_14: ;
      }
      else if (tag_0 == 17) {
         _fx_R17C_form__cdeffun_t v_1 = {0};
         _fx_copy_R17C_form__cdeffun_t(&s_2->u.CDefFun->data, &v_1);
         result_0 = v_1.cf_loc;
         FX_BREAK(_fx_catch_15);

      _fx_catch_15: ;
         _fx_free_R17C_form__cdeffun_t(&v_1);
      }
      else if (tag_0 == 18) {
         _fx_R17C_form__cdeftyp_t v_2 = {0};
         _fx_copy_R17C_form__cdeftyp_t(&s_2->u.CDefTyp->data, &v_2);
         result_0 = v_2.ct_loc;
         FX_BREAK(_fx_catch_16);

      _fx_catch_16: ;
         _fx_free_R17C_form__cdeftyp_t(&v_2);
      }
      else if (tag_0 == 19) {
         result_0 = s_2->u.CDefForwardSym.t1; FX_BREAK(_fx_catch_17);  _fx_catch_17: ;
      }
      else if (tag_0 == 20) {
         result_0 = s_2->u.CDefForwardTyp.t1; FX_BREAK(_fx_catch_18);  _fx_catch_18: ;
      }
      else if (tag_0 == 21) {
         _fx_R18C_form__cdefenum_t v_3 = {0};
         _fx_copy_R18C_form__cdefenum_t(&s_2->u.CDefEnum->data, &v_3);
         result_0 = v_3.cenum_loc;
         FX_BREAK(_fx_catch_19);

      _fx_catch_19: ;
         _fx_free_R18C_form__cdefenum_t(&v_3);
      }
      else if (tag_0 == 22) {
         _fx_R23C_form__cdefinterface_t v_4 = {0};
         _fx_copy_R23C_form__cdefinterface_t(&s_2->u.CDefInterface->data, &v_4);
         result_0 = v_4.ci_loc;
         FX_BREAK(_fx_catch_20);

      _fx_catch_20: ;
         _fx_free_R23C_form__cdefinterface_t(&v_4);
      }
      else if (tag_0 == 23) {
         _fx_R19C_form__cdefmacro_t v_5 = {0};
         _fx_copy_R19C_form__cdefmacro_t(&s_2->u.CMacroDef->data, &v_5);
         result_0 = v_5.cm_loc;
         FX_BREAK(_fx_catch_21);

      _fx_catch_21: ;
         _fx_free_R19C_form__cdefmacro_t(&v_5);
      }
      else if (tag_0 == 24) {
         result_0 = s_2->u.CMacroUndef.t1; FX_BREAK(_fx_catch_22);  _fx_catch_22: ;
      }
      else if (tag_0 == 25) {
         result_0 = s_2->u.CMacroIf.t2; FX_BREAK(_fx_catch_23);  _fx_catch_23: ;
      }
      else if (tag_0 == 26) {
         result_0 = s_2->u.CMacroInclude.t1; FX_BREAK(_fx_catch_24);  _fx_catch_24: ;
      }
      else if (tag_0 == 27) {
         result_0 = s_2->u.CMacroPragma.t1; FX_BREAK(_fx_catch_25);  _fx_catch_25: ;
      }
      else {
         FX_FAST_THROW(FX_EXN_NoMatchError, _fx_catch_26);
      }
      FX_CHECK_EXN(_fx_catch_26);

   _fx_catch_26: ;
      if (s_2) {
         _fx_free_N15C_form__cstmt_t(&s_2);
      }
      FX_CHECK_BREAK();
      FX_CHECK_EXN(_fx_cleanup);
   }
   *fx_result = result_0;

_fx_cleanup: ;
   if (s_1) {
      _fx_free_N15C_form__cstmt_t(&s_1);
   }
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM8get_cvalRM9cdefval_t2R9Ast__id_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* n_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_R17C_form__cdefval_t* fx_result,
   void* fx_fv)
{
   _fx_N15C_form__cinfo_t info_0 = {0};
   int fx_status = 0;
   _fx_Ta2i v_0;
   FX_CALL(_fx_M3AstFM7id2idx_Ta2i2RM4id_tRM5loc_t(n_0, loc_0, &v_0, 0), _fx_cleanup);
   int_ m_0 = v_0.t0;
   int_ j_0 = v_0.t1;
   FX_CHKIDX(FX_CHKIDX1(_fx_g16C_form__all_idcs, 0, m_0), _fx_cleanup);
   FX_CHKIDX(FX_CHKIDX1((*FX_PTR_1D(_fx_Nt9Dynvec__t1N15C_form__cinfo_t, _fx_g16C_form__all_idcs, m_0))->u.t.t1, 0, j_0),
      _fx_cleanup);
   _fx_copy_N15C_form__cinfo_t(
      FX_PTR_1D(_fx_N15C_form__cinfo_t, (*FX_PTR_1D(_fx_Nt9Dynvec__t1N15C_form__cinfo_t, _fx_g16C_form__all_idcs, m_0))->u.t.t1,
         j_0), &info_0);
   if (info_0.tag == 2) {
      _fx_copy_R17C_form__cdefval_t(&info_0.u.CVal, fx_result);
   }
   else {
      fx_str_t v_1 = {0};
      fx_str_t v_2 = {0};
      fx_exn_t v_3 = {0};
      bool __fold_result___0 = true;
      bool t_0;
      if (loc_0->m_idx == _fx_g10Ast__noloc.m_idx) {
         t_0 = __fold_result___0;
      }
      else {
         t_0 = false;
      }
      __fold_result___0 = t_0;
      bool t_1;
      if (loc_0->line0 == _fx_g10Ast__noloc.line0) {
         t_1 = __fold_result___0;
      }
      else {
         t_1 = false;
      }
      __fold_result___0 = t_1;
      bool t_2;
      if (loc_0->col0 == _fx_g10Ast__noloc.col0) {
         t_2 = __fold_result___0;
      }
      else {
         t_2 = false;
      }
      __fold_result___0 = t_2;
      bool t_3;
      if (loc_0->line1 == _fx_g10Ast__noloc.line1) {
         t_3 = __fold_result___0;
      }
      else {
         t_3 = false;
      }
      __fold_result___0 = t_3;
      bool t_4;
      if (loc_0->col1 == _fx_g10Ast__noloc.col1) {
         t_4 = __fold_result___0;
      }
      else {
         t_4 = false;
      }
      __fold_result___0 = t_4;
      _fx_R10Ast__loc_t loc_1;
      if (!__fold_result___0) {
         loc_1 = *loc_0;
      }
      else {
         int tag_0 = info_0.tag;
         if (tag_0 == 1) {
            loc_1 = _fx_g10Ast__noloc;
         }
         else if (tag_0 == 2) {
            loc_1 = info_0.u.CVal.cv_loc;
         }
         else if (tag_0 == 3) {
            _fx_R17C_form__cdeffun_t v_4 = {0};
            _fx_copy_R17C_form__cdeffun_t(&info_0.u.CFun->data, &v_4);
            loc_1 = v_4.cf_loc;
            _fx_free_R17C_form__cdeffun_t(&v_4);
         }
         else if (tag_0 == 4) {
            _fx_R17C_form__cdeftyp_t v_5 = {0};
            _fx_copy_R17C_form__cdeftyp_t(&info_0.u.CTyp->data, &v_5);
            loc_1 = v_5.ct_loc;
            _fx_free_R17C_form__cdeftyp_t(&v_5);
         }
         else if (tag_0 == 5) {
            _fx_R17C_form__cdefexn_t v_6 = {0};
            _fx_copy_R17C_form__cdefexn_t(&info_0.u.CExn->data, &v_6);
            loc_1 = v_6.cexn_loc;
            _fx_free_R17C_form__cdefexn_t(&v_6);
         }
         else if (tag_0 == 7) {
            _fx_R18C_form__cdefenum_t v_7 = {0};
            _fx_copy_R18C_form__cdefenum_t(&info_0.u.CEnum->data, &v_7);
            loc_1 = v_7.cenum_loc;
            _fx_free_R18C_form__cdefenum_t(&v_7);
         }
         else if (tag_0 == 6) {
            _fx_R23C_form__cdefinterface_t v_8 = {0};
            _fx_copy_R23C_form__cdefinterface_t(&info_0.u.CInterface->data, &v_8);
            loc_1 = v_8.ci_loc;
            _fx_free_R23C_form__cdefinterface_t(&v_8);
         }
         else if (tag_0 == 8) {
            loc_1 = info_0.u.CLabel.cl_loc;
         }
         else if (tag_0 == 9) {
            _fx_R19C_form__cdefmacro_t v_9 = {0};
            _fx_copy_R19C_form__cdefmacro_t(&info_0.u.CMacro->data, &v_9);
            loc_1 = v_9.cm_loc;
            _fx_free_R19C_form__cdefmacro_t(&v_9);
         }
         else {
            FX_FAST_THROW(FX_EXN_NoMatchError, _fx_catch_0);
         }
         FX_CHECK_EXN(_fx_catch_0);
      }
      FX_CALL(_fx_M3AstFM6stringS1RM4id_t(n_0, &v_1, 0), _fx_catch_0);
      fx_str_t slit_0 = FX_MAKE_STR("symbol \'");
      fx_str_t slit_1 = FX_MAKE_STR("\' is expected to be CVal ...");
      {
         const fx_str_t strs_0[] = { slit_0, v_1, slit_1 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_0, 3, &v_2), _fx_catch_0);
      }
      FX_CALL(_fx_M3AstFM11compile_errE2RM5loc_tS(&loc_1, &v_2, &v_3, 0), _fx_catch_0);
      FX_THROW(&v_3, false, _fx_catch_0);

   _fx_catch_0: ;
      fx_free_exn(&v_3);
      FX_FREE_STR(&v_2);
      FX_FREE_STR(&v_1);
   }

_fx_cleanup: ;
   _fx_free_N15C_form__cinfo_t(&info_0);
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM13get_cinfo_typN14C_form__ctyp_t3N15C_form__cinfo_tR9Ast__id_tR10Ast__loc_t(
   struct _fx_N15C_form__cinfo_t* info_0,
   struct _fx_R9Ast__id_t* i_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_N14C_form__ctyp_t_data_t** fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   if (info_0->tag == 1) {
      fx_str_t v_0 = {0};
      fx_str_t v_1 = {0};
      fx_exn_t v_2 = {0};
      FX_CALL(_fx_M3AstFM6stringS1RM4id_t(i_0, &v_0, 0), _fx_catch_0);
      fx_str_t slit_0 = FX_MAKE_STR("check_cinfo: attempt to request type of non-existing symbol \'");
      fx_str_t slit_1 = FX_MAKE_STR("\'");
      {
         const fx_str_t strs_0[] = { slit_0, v_0, slit_1 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_0, 3, &v_1), _fx_catch_0);
      }
      FX_CALL(_fx_M3AstFM11compile_errE2RM5loc_tS(loc_0, &v_1, &v_2, 0), _fx_catch_0);
      FX_THROW(&v_2, false, _fx_catch_0);

   _fx_catch_0: ;
      fx_free_exn(&v_2);
      FX_FREE_STR(&v_1);
      FX_FREE_STR(&v_0);
   }
   FX_CHECK_EXN(_fx_cleanup);
   int tag_0 = info_0->tag;
   if (tag_0 == 1) {
      FX_COPY_PTR(_fx_g15C_form__CTypAny, fx_result);
   }
   else if (tag_0 == 2) {
      FX_COPY_PTR(info_0->u.CVal.cv_typ, fx_result);
   }
   else if (tag_0 == 3) {
      _fx_R17C_form__cdeffun_t v_3 = {0};
      _fx_LN14C_form__ctyp_t v_4 = 0;
      _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t cf_args_0 = 0;
      _fx_copy_R17C_form__cdeffun_t(&info_0->u.CFun->data, &v_3);
      _fx_LN14C_form__ctyp_t lstend_0 = 0;
      FX_COPY_PTR(v_3.cf_args, &cf_args_0);
      _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t lst_0 = cf_args_0;
      for (; lst_0; lst_0 = lst_0->tl) {
         _fx_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t* __pat___0 = &lst_0->hd;
         _fx_LN14C_form__ctyp_t node_0 = 0;
         FX_CALL(_fx_cons_LN14C_form__ctyp_t(__pat___0->t1, 0, false, &node_0), _fx_catch_1);
         FX_LIST_APPEND(v_4, lstend_0, node_0);

      _fx_catch_1: ;
         FX_CHECK_EXN(_fx_catch_2);
      }
      FX_CALL(_fx_M6C_formFM13CTypFunRawPtrN14C_form__ctyp_t2LN14C_form__ctyp_tN14C_form__ctyp_t(v_4, v_3.cf_rt, fx_result),
         _fx_catch_2);

   _fx_catch_2: ;
      if (cf_args_0) {
         _fx_free_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t(&cf_args_0);
      }
      if (v_4) {
         _fx_free_LN14C_form__ctyp_t(&v_4);
      }
      _fx_free_R17C_form__cdeffun_t(&v_3);
   }
   else if (tag_0 == 4) {
      _fx_R17C_form__cdeftyp_t v_5 = {0};
      _fx_copy_R17C_form__cdeftyp_t(&info_0->u.CTyp->data, &v_5);
      FX_COPY_PTR(v_5.ct_typ, fx_result);
      _fx_free_R17C_form__cdeftyp_t(&v_5);
   }
   else if (tag_0 == 5) {
      FX_COPY_PTR(_fx_g15C_form__CTypExn, fx_result);
   }
   else if (tag_0 == 6) {
      _fx_R23C_form__cdefinterface_t v_6 = {0};
      _fx_copy_R23C_form__cdefinterface_t(&info_0->u.CInterface->data, &v_6);
      FX_CALL(_fx_M6C_formFM8CTypNameN14C_form__ctyp_t1R9Ast__id_t(&v_6.ci_name, fx_result), _fx_catch_3);

   _fx_catch_3: ;
      _fx_free_R23C_form__cdefinterface_t(&v_6);
   }
   else if (tag_0 == 9) {
      _fx_R19C_form__cdefmacro_t v_7 = {0};
      _fx_copy_R19C_form__cdefmacro_t(&info_0->u.CMacro->data, &v_7);
      _fx_LR9Ast__id_t cm_args_0 = v_7.cm_args;
      if (cm_args_0 == 0) {
         FX_COPY_PTR(_fx_g15C_form__CTypAny, fx_result);
      }
      else {
         _fx_LN14C_form__ctyp_t v_8 = 0;
         _fx_LR9Ast__id_t cm_args_1 = 0;
         _fx_LN14C_form__ctyp_t lstend_1 = 0;
         FX_COPY_PTR(cm_args_0, &cm_args_1);
         _fx_LR9Ast__id_t lst_1 = cm_args_1;
         for (; lst_1; lst_1 = lst_1->tl) {
            _fx_R9Ast__id_t* a_0 = &lst_1->hd;
            _fx_LN14C_form__ctyp_t node_1 = 0;
            FX_CALL(_fx_cons_LN14C_form__ctyp_t(_fx_g15C_form__CTypAny, 0, false, &node_1), _fx_catch_4);
            FX_LIST_APPEND(v_8, lstend_1, node_1);

         _fx_catch_4: ;
            FX_CHECK_EXN(_fx_catch_5);
         }
         FX_CALL(
            _fx_M6C_formFM13CTypFunRawPtrN14C_form__ctyp_t2LN14C_form__ctyp_tN14C_form__ctyp_t(v_8, _fx_g15C_form__CTypAny,
               fx_result), _fx_catch_5);

      _fx_catch_5: ;
         FX_FREE_LIST_SIMPLE(&cm_args_1);
         if (v_8) {
            _fx_free_LN14C_form__ctyp_t(&v_8);
         }
      }
      FX_CHECK_EXN(_fx_catch_6);

   _fx_catch_6: ;
      _fx_free_R19C_form__cdefmacro_t(&v_7);
   }
   else if (tag_0 == 8) {
      FX_COPY_PTR(_fx_g17C_form__CTypLabel, fx_result);
   }
   else if (tag_0 == 7) {
      FX_COPY_PTR(_fx_g16C_form__CTypCInt, fx_result);
   }
   else {
      FX_FAST_THROW(FX_EXN_NoMatchError, _fx_cleanup);
   }

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM13get_idc_cnameS2R9Ast__id_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* i_0,
   struct _fx_R10Ast__loc_t* loc_0,
   fx_str_t* fx_result,
   void* fx_fv)
{
   _fx_N15C_form__cinfo_t v_0 = {0};
   int fx_status = 0;
   if (i_0->m == 0) {
      FX_CALL(_fx_M3AstFM2ppS1RM4id_t(i_0, fx_result, 0), _fx_cleanup);
   }
   else {
      _fx_Ta2i v_1;
      FX_CALL(_fx_M3AstFM7id2idx_Ta2i2RM4id_tRM5loc_t(i_0, loc_0, &v_1, 0), _fx_cleanup);
      int_ m_0 = v_1.t0;
      int_ j_0 = v_1.t1;
      FX_CHKIDX(FX_CHKIDX1(_fx_g16C_form__all_idcs, 0, m_0), _fx_cleanup);
      FX_CHKIDX(FX_CHKIDX1((*FX_PTR_1D(_fx_Nt9Dynvec__t1N15C_form__cinfo_t, _fx_g16C_form__all_idcs, m_0))->u.t.t1, 0, j_0),
         _fx_cleanup);
      _fx_copy_N15C_form__cinfo_t(
         FX_PTR_1D(_fx_N15C_form__cinfo_t,
            (*FX_PTR_1D(_fx_Nt9Dynvec__t1N15C_form__cinfo_t, _fx_g16C_form__all_idcs, m_0))->u.t.t1, j_0), &v_0);
      int tag_0 = v_0.tag;
      if (tag_0 == 1) {
         fx_str_t slit_0 = FX_MAKE_STR(""); fx_copy_str(&slit_0, fx_result);
      }
      else if (tag_0 == 2) {
         fx_copy_str(&v_0.u.CVal.cv_cname, fx_result);
      }
      else if (tag_0 == 3) {
         _fx_R17C_form__cdeffun_t v_2 = {0};
         _fx_copy_R17C_form__cdeffun_t(&v_0.u.CFun->data, &v_2);
         fx_copy_str(&v_2.cf_cname, fx_result);
         _fx_free_R17C_form__cdeffun_t(&v_2);
      }
      else if (tag_0 == 4) {
         _fx_R17C_form__cdeftyp_t v_3 = {0};
         _fx_copy_R17C_form__cdeftyp_t(&v_0.u.CTyp->data, &v_3);
         fx_copy_str(&v_3.ct_cname, fx_result);
         _fx_free_R17C_form__cdeftyp_t(&v_3);
      }
      else if (tag_0 == 8) {
         fx_copy_str(&v_0.u.CLabel.cl_cname, fx_result);
      }
      else if (tag_0 == 7) {
         _fx_R18C_form__cdefenum_t v_4 = {0};
         _fx_copy_R18C_form__cdefenum_t(&v_0.u.CEnum->data, &v_4);
         fx_copy_str(&v_4.cenum_cname, fx_result);
         _fx_free_R18C_form__cdefenum_t(&v_4);
      }
      else if (tag_0 == 5) {
         _fx_R17C_form__cdefexn_t v_5 = {0};
         _fx_copy_R17C_form__cdefexn_t(&v_0.u.CExn->data, &v_5);
         fx_copy_str(&v_5.cexn_cname, fx_result);
         _fx_free_R17C_form__cdefexn_t(&v_5);
      }
      else if (tag_0 == 6) {
         _fx_R23C_form__cdefinterface_t v_6 = {0};
         _fx_copy_R23C_form__cdefinterface_t(&v_0.u.CInterface->data, &v_6);
         fx_copy_str(&v_6.ci_cname, fx_result);
         _fx_free_R23C_form__cdefinterface_t(&v_6);
      }
      else if (tag_0 == 9) {
         _fx_R19C_form__cdefmacro_t v_7 = {0};
         _fx_copy_R19C_form__cdefmacro_t(&v_0.u.CMacro->data, &v_7);
         fx_copy_str(&v_7.cm_cname, fx_result);
         _fx_free_R19C_form__cdefmacro_t(&v_7);
      }
      else {
         FX_FAST_THROW(FX_EXN_NoMatchError, _fx_cleanup);
      }
      FX_CHECK_EXN(_fx_cleanup);
   }

_fx_cleanup: ;
   _fx_free_N15C_form__cinfo_t(&v_0);
   return fx_status;
}

FX_EXTERN_C int
   _fx_M6C_formFM14create_cdefvalT2N14C_form__cexp_tLN15C_form__cstmt_t7R9Ast__id_tN14C_form__ctyp_tR16Ast__val_flags_tSNt6option1N14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* n_0,
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_R16Ast__val_flags_t* flags_0,
   fx_str_t* cname_0,
   struct _fx_Nt6option1N14C_form__cexp_t* e_opt_0,
   struct _fx_LN15C_form__cstmt_t_data_t* code_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_T2N14C_form__cexp_tLN15C_form__cstmt_t* fx_result,
   void* fx_fv)
{
   _fx_R17C_form__cdefval_t dv_0 = {0};
   int fx_status = 0;
   _fx_make_R17C_form__cdefval_t(n_0, t_0, cname_0, flags_0, loc_0, &dv_0);
   if (FX_REC_VARIANT_TAG(t_0) == 8) {
      fx_exn_t v_0 = {0};
      fx_str_t slit_0 = FX_MAKE_STR("values of \'void\' type are not allowed");
      FX_CALL(_fx_M3AstFM11compile_errE2RM5loc_tS(loc_0, &slit_0, &v_0, 0), _fx_catch_0);
      FX_THROW(&v_0, false, _fx_catch_0);

   _fx_catch_0: ;
      fx_free_exn(&v_0);
   }
   else {
      _fx_N15C_form__cinfo_t v_1 = {0};
      _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_2 = {0};
      _fx_N14C_form__cexp_t v_3 = 0;
      _fx_N15C_form__cstmt_t v_4 = 0;
      _fx_LN15C_form__cstmt_t v_5 = 0;
      _fx_M6C_formFM4CValN15C_form__cinfo_t1RM9cdefval_t(&dv_0, &v_1);
      _fx_Ta2i v_6;
      FX_CALL(_fx_M3AstFM6id2idxTa2i1RM4id_t(n_0, &v_6, 0), _fx_catch_1);
      int_ m_0 = v_6.t0;
      int_ j_0 = v_6.t1;
      FX_CHKIDX(FX_CHKIDX1(_fx_g16C_form__all_idcs, 0, m_0), _fx_catch_1);
      FX_CHKIDX(FX_CHKIDX1((*FX_PTR_1D(_fx_Nt9Dynvec__t1N15C_form__cinfo_t, _fx_g16C_form__all_idcs, m_0))->u.t.t1, 0, j_0),
         _fx_catch_1);
      _fx_N15C_form__cinfo_t* v_7 =
         FX_PTR_1D(_fx_N15C_form__cinfo_t,
            (*FX_PTR_1D(_fx_Nt9Dynvec__t1N15C_form__cinfo_t, _fx_g16C_form__all_idcs, m_0))->u.t.t1, j_0);
      _fx_free_N15C_form__cinfo_t(v_7);
      _fx_copy_N15C_form__cinfo_t(&v_1, v_7);
      _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(t_0, loc_0, &v_2);
      FX_CALL(_fx_M6C_formFM9CExpIdentN14C_form__cexp_t2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(n_0, &v_2, &v_3),
         _fx_catch_1);
      FX_CALL(
         _fx_M6C_formFM7CDefValN15C_form__cstmt_t4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t(t_0, n_0,
            e_opt_0, loc_0, &v_4), _fx_catch_1);
      FX_CALL(_fx_cons_LN15C_form__cstmt_t(v_4, code_0, true, &v_5), _fx_catch_1);
      _fx_make_T2N14C_form__cexp_tLN15C_form__cstmt_t(v_3, v_5, fx_result);

   _fx_catch_1: ;
      if (v_5) {
         _fx_free_LN15C_form__cstmt_t(&v_5);
      }
      if (v_4) {
         _fx_free_N15C_form__cstmt_t(&v_4);
      }
      if (v_3) {
         _fx_free_N14C_form__cexp_t(&v_3);
      }
      _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_2);
      _fx_free_N15C_form__cinfo_t(&v_1);
   }
   _fx_free_R17C_form__cdefval_t(&dv_0);
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM10add_cf_argv4R9Ast__id_tN14C_form__ctyp_tSR10Ast__loc_t(
   struct _fx_R9Ast__id_t* v_0,
   struct _fx_N14C_form__ctyp_t_data_t* ctyp_0,
   fx_str_t* cname_0,
   struct _fx_R10Ast__loc_t* loc_0,
   void* fx_fv)
{
   _fx_R16Ast__val_flags_t v_1 = {0};
   _fx_R16Ast__val_flags_t v_2 = {0};
   _fx_R17C_form__cdefval_t cv_0 = {0};
   _fx_N15C_form__cinfo_t v_3 = {0};
   int fx_status = 0;
   FX_CALL(_fx_M3AstFM17default_val_flagsRM11val_flags_t0(&v_1, 0), _fx_cleanup);
   _fx_make_R16Ast__val_flags_t(true, v_1.val_flag_mutable, v_1.val_flag_temp, v_1.val_flag_tempref, v_1.val_flag_private,
      v_1.val_flag_subarray, v_1.val_flag_instance, &v_1.val_flag_method, v_1.val_flag_ctor, v_1.val_flag_global, &v_2);
   _fx_make_R17C_form__cdefval_t(v_0, ctyp_0, cname_0, &v_2, loc_0, &cv_0);
   _fx_M6C_formFM4CValN15C_form__cinfo_t1RM9cdefval_t(&cv_0, &v_3);
   _fx_Ta2i v_4;
   FX_CALL(_fx_M3AstFM6id2idxTa2i1RM4id_t(v_0, &v_4, 0), _fx_cleanup);
   int_ m_0 = v_4.t0;
   int_ j_0 = v_4.t1;
   FX_CHKIDX(FX_CHKIDX1(_fx_g16C_form__all_idcs, 0, m_0), _fx_cleanup);
   FX_CHKIDX(FX_CHKIDX1((*FX_PTR_1D(_fx_Nt9Dynvec__t1N15C_form__cinfo_t, _fx_g16C_form__all_idcs, m_0))->u.t.t1, 0, j_0),
      _fx_cleanup);
   _fx_N15C_form__cinfo_t* v_5 =
      FX_PTR_1D(_fx_N15C_form__cinfo_t, (*FX_PTR_1D(_fx_Nt9Dynvec__t1N15C_form__cinfo_t, _fx_g16C_form__all_idcs, m_0))->u.t.t1,
         j_0);
   _fx_free_N15C_form__cinfo_t(v_5);
   _fx_copy_N15C_form__cinfo_t(&v_3, v_5);

_fx_cleanup: ;
   _fx_free_R16Ast__val_flags_t(&v_1);
   _fx_free_R16Ast__val_flags_t(&v_2);
   _fx_free_R17C_form__cdefval_t(&cv_0);
   _fx_free_N15C_form__cinfo_t(&v_3);
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM15filter_out_nopsLN15C_form__cstmt_t1LN15C_form__cstmt_t(
   struct _fx_LN15C_form__cstmt_t_data_t* code_0,
   struct _fx_LN15C_form__cstmt_t_data_t** fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   _fx_LN15C_form__cstmt_t lstend_0 = 0;
   _fx_LN15C_form__cstmt_t lst_0 = code_0;
   for (; lst_0; lst_0 = lst_0->tl) {
      _fx_N15C_form__cstmt_t x_0 = lst_0->hd;
      bool res_0;
      if (FX_REC_VARIANT_TAG(x_0) == 1) {
         res_0 = false;
      }
      else {
         res_0 = true;
      }
      FX_CHECK_EXN(_fx_catch_0);
      if (!res_0) {
         FX_CONTINUE(_fx_catch_0);
      }
      _fx_LN15C_form__cstmt_t node_0 = 0;
      FX_CALL(_fx_cons_LN15C_form__cstmt_t(x_0, 0, false, &node_0), _fx_catch_0);
      FX_LIST_APPEND(*fx_result, lstend_0, node_0);

   _fx_catch_0: ;
      FX_CHECK_CONTINUE();
      FX_CHECK_EXN(_fx_cleanup);
   }

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM11rccode2stmtN15C_form__cstmt_t2LN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_LN15C_form__cstmt_t_data_t* code_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result,
   void* fx_fv)
{
   _fx_LN15C_form__cstmt_t v_0 = 0;
   int fx_status = 0;
   _fx_LN15C_form__cstmt_t lstend_0 = 0;
   _fx_LN15C_form__cstmt_t lst_0 = code_0;
   for (; lst_0; lst_0 = lst_0->tl) {
      _fx_N15C_form__cstmt_t x_0 = lst_0->hd;
      bool res_0;
      if (FX_REC_VARIANT_TAG(x_0) == 1) {
         res_0 = false;
      }
      else {
         res_0 = true;
      }
      FX_CHECK_EXN(_fx_catch_0);
      if (!res_0) {
         FX_CONTINUE(_fx_catch_0);
      }
      _fx_LN15C_form__cstmt_t node_0 = 0;
      FX_CALL(_fx_cons_LN15C_form__cstmt_t(x_0, 0, false, &node_0), _fx_catch_0);
      FX_LIST_APPEND(v_0, lstend_0, node_0);

   _fx_catch_0: ;
      FX_CHECK_CONTINUE();
      FX_CHECK_EXN(_fx_cleanup);
   }
   if (v_0 == 0) {
      FX_CALL(_fx_M6C_formFM8CStmtNopN15C_form__cstmt_t1R10Ast__loc_t(loc_0, fx_result), _fx_catch_1);

   _fx_catch_1: ;
      goto _fx_endmatch_0;
   }
   if (v_0 != 0) {
      if (v_0->tl == 0) {
         FX_COPY_PTR(v_0->hd, fx_result); goto _fx_endmatch_0;
      }
   }
   _fx_LR10Ast__loc_t v_1 = 0;
   _fx_LN15C_form__cstmt_t __fold_result___0 = 0;
   _fx_LN15C_form__cstmt_t v_2 = 0;
   _fx_LR10Ast__loc_t lstend_1 = 0;
   _fx_LN15C_form__cstmt_t lst_1 = code_0;
   for (; lst_1; lst_1 = lst_1->tl) {
      _fx_N15C_form__cstmt_t x_1 = lst_1->hd;
      _fx_R10Ast__loc_t res_1;
      FX_CALL(_fx_M6C_formFM13get_cstmt_locR10Ast__loc_t1N15C_form__cstmt_t(x_1, &res_1, 0), _fx_catch_2);
      _fx_LR10Ast__loc_t node_1 = 0;
      FX_CALL(_fx_cons_LR10Ast__loc_t(&res_1, 0, false, &node_1), _fx_catch_2);
      FX_LIST_APPEND(v_1, lstend_1, node_1);

   _fx_catch_2: ;
      FX_CHECK_EXN(_fx_catch_4);
   }
   _fx_R10Ast__loc_t final_loc_0;
   FX_CALL(_fx_M3AstFM11loclist2locRM5loc_t2LRM5loc_tRM5loc_t(v_1, loc_0, &final_loc_0, 0), _fx_catch_4);
   _fx_LN15C_form__cstmt_t lst_2 = code_0;
   for (; lst_2; lst_2 = lst_2->tl) {
      _fx_LN15C_form__cstmt_t r_0 = 0;
      _fx_N15C_form__cstmt_t a_0 = lst_2->hd;
      FX_COPY_PTR(__fold_result___0, &r_0);
      FX_CALL(_fx_cons_LN15C_form__cstmt_t(a_0, r_0, false, &r_0), _fx_catch_3);
      _fx_free_LN15C_form__cstmt_t(&__fold_result___0);
      FX_COPY_PTR(r_0, &__fold_result___0);

   _fx_catch_3: ;
      if (r_0) {
         _fx_free_LN15C_form__cstmt_t(&r_0);
      }
      FX_CHECK_EXN(_fx_catch_4);
   }
   FX_COPY_PTR(__fold_result___0, &v_2);
   FX_CALL(_fx_M6C_formFM10CStmtBlockN15C_form__cstmt_t2LN15C_form__cstmt_tR10Ast__loc_t(v_2, &final_loc_0, fx_result),
      _fx_catch_4);

_fx_catch_4: ;
   if (v_2) {
      _fx_free_LN15C_form__cstmt_t(&v_2);
   }
   if (__fold_result___0) {
      _fx_free_LN15C_form__cstmt_t(&__fold_result___0);
   }
   FX_FREE_LIST_SIMPLE(&v_1);

_fx_endmatch_0: ;

_fx_cleanup: ;
   if (v_0) {
      _fx_free_LN15C_form__cstmt_t(&v_0);
   }
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM10stmt2ccodeLN15C_form__cstmt_t1N15C_form__cstmt_t(
   struct _fx_N15C_form__cstmt_t_data_t* s_0,
   struct _fx_LN15C_form__cstmt_t_data_t** fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   int tag_0 = FX_REC_VARIANT_TAG(s_0);
   if (tag_0 != 1) {
      if (tag_0 == 7) {
         FX_COPY_PTR(s_0->u.CStmtBlock.t0, fx_result);
      }
      else {
         FX_CALL(_fx_cons_LN15C_form__cstmt_t(s_0, 0, true, fx_result), _fx_catch_0);  _fx_catch_0: ;
      }
   }
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM9cexp2stmtN15C_form__cstmt_t1N14C_form__cexp_t(
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   if (FX_REC_VARIANT_TAG(e_0) == 10) {
      _fx_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_0 = &e_0->u.CExpInit;
      if (vcase_0->t0 == 0) {
         _fx_T2N14C_form__ctyp_tR10Ast__loc_t* v_0 = &vcase_0->t1;
         if (FX_REC_VARIANT_TAG(v_0->t0) == 8) {
            FX_CALL(_fx_M6C_formFM8CStmtNopN15C_form__cstmt_t1R10Ast__loc_t(&v_0->t1, fx_result), _fx_catch_0);

         _fx_catch_0: ;
            goto _fx_endmatch_0;
         }
      }
   }
   FX_CALL(_fx_M6C_formFM4CExpN15C_form__cstmt_t1N14C_form__cexp_t(e_0, fx_result), _fx_catch_1);

_fx_catch_1: ;

_fx_endmatch_0: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM18get_cinterface_optNt6option1rRM15cdefinterface_t2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_Nt6option1rR23C_form__cdefinterface_t* fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   if (FX_REC_VARIANT_TAG(t_0) == 21) {
      _fx_N15C_form__cinfo_t v_0 = {0};
      _fx_Ta2i v_1;
      FX_CALL(_fx_M3AstFM7id2idx_Ta2i2RM4id_tRM5loc_t(&t_0->u.CTypName, loc_0, &v_1, 0), _fx_catch_0);
      int_ m_0 = v_1.t0;
      int_ j_0 = v_1.t1;
      FX_CHKIDX(FX_CHKIDX1(_fx_g16C_form__all_idcs, 0, m_0), _fx_catch_0);
      FX_CHKIDX(FX_CHKIDX1((*FX_PTR_1D(_fx_Nt9Dynvec__t1N15C_form__cinfo_t, _fx_g16C_form__all_idcs, m_0))->u.t.t1, 0, j_0),
         _fx_catch_0);
      _fx_copy_N15C_form__cinfo_t(
         FX_PTR_1D(_fx_N15C_form__cinfo_t,
            (*FX_PTR_1D(_fx_Nt9Dynvec__t1N15C_form__cinfo_t, _fx_g16C_form__all_idcs, m_0))->u.t.t1, j_0), &v_0);
      if (v_0.tag == 6) {
         _fx_M6C_formFM4SomeNt6option1rRM15cdefinterface_t1rRM15cdefinterface_t(v_0.u.CInterface, fx_result);
      }
      else {
         _fx_copy_Nt6option1rR23C_form__cdefinterface_t(&_fx_g12C_form__None, fx_result);
      }
      FX_CHECK_EXN(_fx_catch_0);

   _fx_catch_0: ;
      _fx_free_N15C_form__cinfo_t(&v_0);
   }
   else {
      _fx_copy_Nt6option1rR23C_form__cdefinterface_t(&_fx_g12C_form__None, fx_result);
   }
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM17check_n_walk_ctypN14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_N14C_form__ctyp_t_data_t** fx_result,
   void* fx_fv)
{
   _fx_Nt6option1FPN14C_form__ctyp_t2N14C_form__ctyp_tR17C_form__c_callb_t v_0 = 0;
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   FX_COPY_PTR(callb_0->ccb_typ, &v_0);
   if ((v_0 != 0) + 1 == 2) {
      _fx_FPN14C_form__ctyp_t2N14C_form__ctyp_tR17C_form__c_callb_t* f_0 = &v_0->u.Some;
      FX_CALL(f_0->fp(t_0, callb_0, fx_result, f_0->fcv), _fx_catch_0);

   _fx_catch_0: ;
   }
   else {
      FX_CALL(_fx_M6C_formFM9walk_ctypN14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(t_0, callb_0, fx_result, 0), _fx_catch_1);

   _fx_catch_1: ;
   }

_fx_cleanup: ;
   if (v_0) {
      _fx_free_Nt6option1FPN14C_form__ctyp_t2N14C_form__ctyp_tR17C_form__c_callb_t(&v_0);
   }
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM17check_n_walk_cexpN14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_N14C_form__cexp_t_data_t** fx_result,
   void* fx_fv)
{
   _fx_Nt6option1FPN14C_form__cexp_t2N14C_form__cexp_tR17C_form__c_callb_t v_0 = 0;
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   FX_COPY_PTR(callb_0->ccb_exp, &v_0);
   if ((v_0 != 0) + 1 == 2) {
      _fx_FPN14C_form__cexp_t2N14C_form__cexp_tR17C_form__c_callb_t* f_0 = &v_0->u.Some;
      FX_CALL(f_0->fp(e_0, callb_0, fx_result, f_0->fcv), _fx_catch_0);

   _fx_catch_0: ;
   }
   else {
      FX_CALL(_fx_M6C_formFM9walk_cexpN14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(e_0, callb_0, fx_result, 0), _fx_catch_1);

   _fx_catch_1: ;
   }

_fx_cleanup: ;
   if (v_0) {
      _fx_free_Nt6option1FPN14C_form__cexp_t2N14C_form__cexp_tR17C_form__c_callb_t(&v_0);
   }
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM18check_n_walk_cstmtN15C_form__cstmt_t2N15C_form__cstmt_tRM9c_callb_t(
   struct _fx_N15C_form__cstmt_t_data_t* s_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result,
   void* fx_fv)
{
   _fx_Nt6option1FPN15C_form__cstmt_t2N15C_form__cstmt_tR17C_form__c_callb_t v_0 = 0;
   int fx_status = 0;
   FX_COPY_PTR(callb_0->ccb_stmt, &v_0);
   if ((v_0 != 0) + 1 == 2) {
      _fx_FPN15C_form__cstmt_t2N15C_form__cstmt_tR17C_form__c_callb_t* f_0 = &v_0->u.Some;
      FX_CALL(f_0->fp(s_0, callb_0, fx_result, f_0->fcv), _fx_catch_0);

   _fx_catch_0: ;
   }
   else {
      FX_CALL(_fx_M6C_formFM10walk_cstmtN15C_form__cstmt_t2N15C_form__cstmt_tRM9c_callb_t(s_0, callb_0, fx_result, 0),
         _fx_catch_1);

   _fx_catch_1: ;
   }
   if (v_0) {
      _fx_free_Nt6option1FPN15C_form__cstmt_t2N15C_form__cstmt_tR17C_form__c_callb_t(&v_0);
   }
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM9walk_ctypN14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_N14C_form__ctyp_t_data_t** fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   int tag_0 = FX_REC_VARIANT_TAG(t_0);
   bool res_0;
   if (tag_0 == 1) {
      res_0 = true;
   }
   else if (tag_0 == 6) {
      res_0 = true;
   }
   else if (tag_0 == 2) {
      res_0 = true;
   }
   else if (tag_0 == 4) {
      res_0 = true;
   }
   else if (tag_0 == 5) {
      res_0 = true;
   }
   else if (tag_0 == 7) {
      res_0 = true;
   }
   else if (tag_0 == 3) {
      res_0 = true;
   }
   else if (tag_0 == 8) {
      res_0 = true;
   }
   else if (tag_0 == 9) {
      res_0 = true;
   }
   else if (tag_0 == 13) {
      res_0 = true;
   }
   else if (tag_0 == 23) {
      res_0 = true;
   }
   else if (tag_0 == 10) {
      res_0 = true;
   }
   else if (tag_0 == 11) {
      res_0 = true;
   }
   else if (tag_0 == 12) {
      res_0 = true;
   }
   else {
      res_0 = false;
   }
   FX_CHECK_EXN(_fx_cleanup);
   if (res_0) {
      FX_COPY_PTR(t_0, fx_result); goto _fx_endmatch_0;
   }
   if (tag_0 == 14) {
      _fx_LT2R9Ast__id_tN14C_form__ctyp_t v_0 = 0;
      _fx_LT2R9Ast__id_tN14C_form__ctyp_t selems_0 = 0;
      _fx_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t* vcase_0 = &t_0->u.CTypStruct;
      _fx_Nt6option1R9Ast__id_t* n_opt_0 = &vcase_0->t0;
      _fx_Nt6option1R9Ast__id_t v_1;
      if (n_opt_0->tag == 2) {
         _fx_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t v_2 = 0;
         _fx_R9Ast__id_t* n_0 = &n_opt_0->u.Some;
         FX_COPY_PTR(callb_0->ccb_ident, &v_2);
         _fx_R9Ast__id_t v_3;
         if ((v_2 != 0) + 1 == 2) {
            _fx_FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t* f_0 = &v_2->u.Some;
            FX_CALL(f_0->fp(n_0, callb_0, &v_3, f_0->fcv), _fx_catch_0);

         _fx_catch_0: ;
         }
         else {
            v_3 = *n_0;
         }
         FX_CHECK_EXN(_fx_catch_1);
         _fx_M6C_formFM4SomeNt6option1R9Ast__id_t1R9Ast__id_t(&v_3, &v_1);

      _fx_catch_1: ;
         if (v_2) {
            _fx_free_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t(&v_2);
         }
      }
      else {
         v_1 = _fx_g14C_form__None1_;
      }
      FX_CHECK_EXN(_fx_catch_4);
      _fx_LT2R9Ast__id_tN14C_form__ctyp_t lstend_0 = 0;
      FX_COPY_PTR(vcase_0->t1, &selems_0);
      _fx_LT2R9Ast__id_tN14C_form__ctyp_t lst_0 = selems_0;
      for (; lst_0; lst_0 = lst_0->tl) {
         _fx_N14C_form__ctyp_t t_1 = 0;
         _fx_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t v_4 = 0;
         _fx_N14C_form__ctyp_t v_5 = 0;
         _fx_T2R9Ast__id_tN14C_form__ctyp_t tup_0 = {0};
         _fx_T2R9Ast__id_tN14C_form__ctyp_t* __pat___0 = &lst_0->hd;
         _fx_R9Ast__id_t n_1 = __pat___0->t0;
         FX_COPY_PTR(__pat___0->t1, &t_1);
         FX_COPY_PTR(callb_0->ccb_ident, &v_4);
         _fx_R9Ast__id_t v_6;
         if ((v_4 != 0) + 1 == 2) {
            _fx_FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t* f_1 = &v_4->u.Some;
            FX_CALL(f_1->fp(&n_1, callb_0, &v_6, f_1->fcv), _fx_catch_2);

         _fx_catch_2: ;
         }
         else {
            v_6 = n_1;
         }
         FX_CHECK_EXN(_fx_catch_3);
         FX_CALL(_fx_M6C_formFM10walk_ctyp_N14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(t_1, callb_0, &v_5, 0), _fx_catch_3);
         _fx_make_T2R9Ast__id_tN14C_form__ctyp_t(&v_6, v_5, &tup_0);
         _fx_LT2R9Ast__id_tN14C_form__ctyp_t node_0 = 0;
         FX_CALL(_fx_cons_LT2R9Ast__id_tN14C_form__ctyp_t(&tup_0, 0, false, &node_0), _fx_catch_3);
         FX_LIST_APPEND(v_0, lstend_0, node_0);

      _fx_catch_3: ;
         _fx_free_T2R9Ast__id_tN14C_form__ctyp_t(&tup_0);
         if (v_5) {
            _fx_free_N14C_form__ctyp_t(&v_5);
         }
         if (v_4) {
            _fx_free_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t(&v_4);
         }
         if (t_1) {
            _fx_free_N14C_form__ctyp_t(&t_1);
         }
         FX_CHECK_EXN(_fx_catch_4);
      }
      FX_CALL(
         _fx_M6C_formFM10CTypStructN14C_form__ctyp_t2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t(&v_1, v_0, fx_result),
         _fx_catch_4);

   _fx_catch_4: ;
      if (selems_0) {
         _fx_free_LT2R9Ast__id_tN14C_form__ctyp_t(&selems_0);
      }
      if (v_0) {
         _fx_free_LT2R9Ast__id_tN14C_form__ctyp_t(&v_0);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 15) {
      _fx_LT2R9Ast__id_tN14C_form__ctyp_t v_7 = 0;
      _fx_LT2R9Ast__id_tN14C_form__ctyp_t uelems_0 = 0;
      _fx_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t* vcase_1 = &t_0->u.CTypUnion;
      _fx_Nt6option1R9Ast__id_t* n_opt_1 = &vcase_1->t0;
      _fx_Nt6option1R9Ast__id_t v_8;
      if (n_opt_1->tag == 2) {
         _fx_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t v_9 = 0;
         _fx_R9Ast__id_t* n_2 = &n_opt_1->u.Some;
         FX_COPY_PTR(callb_0->ccb_ident, &v_9);
         _fx_R9Ast__id_t v_10;
         if ((v_9 != 0) + 1 == 2) {
            _fx_FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t* f_2 = &v_9->u.Some;
            FX_CALL(f_2->fp(n_2, callb_0, &v_10, f_2->fcv), _fx_catch_5);

         _fx_catch_5: ;
         }
         else {
            v_10 = *n_2;
         }
         FX_CHECK_EXN(_fx_catch_6);
         _fx_M6C_formFM4SomeNt6option1R9Ast__id_t1R9Ast__id_t(&v_10, &v_8);

      _fx_catch_6: ;
         if (v_9) {
            _fx_free_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t(&v_9);
         }
      }
      else {
         v_8 = _fx_g14C_form__None1_;
      }
      FX_CHECK_EXN(_fx_catch_9);
      _fx_LT2R9Ast__id_tN14C_form__ctyp_t lstend_1 = 0;
      FX_COPY_PTR(vcase_1->t1, &uelems_0);
      _fx_LT2R9Ast__id_tN14C_form__ctyp_t lst_1 = uelems_0;
      for (; lst_1; lst_1 = lst_1->tl) {
         _fx_N14C_form__ctyp_t t_2 = 0;
         _fx_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t v_11 = 0;
         _fx_N14C_form__ctyp_t v_12 = 0;
         _fx_T2R9Ast__id_tN14C_form__ctyp_t tup_1 = {0};
         _fx_T2R9Ast__id_tN14C_form__ctyp_t* __pat___1 = &lst_1->hd;
         _fx_R9Ast__id_t n_3 = __pat___1->t0;
         FX_COPY_PTR(__pat___1->t1, &t_2);
         FX_COPY_PTR(callb_0->ccb_ident, &v_11);
         _fx_R9Ast__id_t v_13;
         if ((v_11 != 0) + 1 == 2) {
            _fx_FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t* f_3 = &v_11->u.Some;
            FX_CALL(f_3->fp(&n_3, callb_0, &v_13, f_3->fcv), _fx_catch_7);

         _fx_catch_7: ;
         }
         else {
            v_13 = n_3;
         }
         FX_CHECK_EXN(_fx_catch_8);
         FX_CALL(_fx_M6C_formFM10walk_ctyp_N14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(t_2, callb_0, &v_12, 0),
            _fx_catch_8);
         _fx_make_T2R9Ast__id_tN14C_form__ctyp_t(&v_13, v_12, &tup_1);
         _fx_LT2R9Ast__id_tN14C_form__ctyp_t node_1 = 0;
         FX_CALL(_fx_cons_LT2R9Ast__id_tN14C_form__ctyp_t(&tup_1, 0, false, &node_1), _fx_catch_8);
         FX_LIST_APPEND(v_7, lstend_1, node_1);

      _fx_catch_8: ;
         _fx_free_T2R9Ast__id_tN14C_form__ctyp_t(&tup_1);
         if (v_12) {
            _fx_free_N14C_form__ctyp_t(&v_12);
         }
         if (v_11) {
            _fx_free_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t(&v_11);
         }
         if (t_2) {
            _fx_free_N14C_form__ctyp_t(&t_2);
         }
         FX_CHECK_EXN(_fx_catch_9);
      }
      FX_CALL(
         _fx_M6C_formFM9CTypUnionN14C_form__ctyp_t2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t(&v_8, v_7, fx_result),
         _fx_catch_9);

   _fx_catch_9: ;
      if (uelems_0) {
         _fx_free_LT2R9Ast__id_tN14C_form__ctyp_t(&uelems_0);
      }
      if (v_7) {
         _fx_free_LT2R9Ast__id_tN14C_form__ctyp_t(&v_7);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 16) {
      _fx_LN14C_form__ctyp_t v_14 = 0;
      _fx_LN14C_form__ctyp_t args_0 = 0;
      _fx_N14C_form__ctyp_t v_15 = 0;
      _fx_T2LN14C_form__ctyp_tN14C_form__ctyp_t* vcase_2 = &t_0->u.CTypFunRawPtr;
      _fx_LN14C_form__ctyp_t lstend_2 = 0;
      FX_COPY_PTR(vcase_2->t0, &args_0);
      _fx_LN14C_form__ctyp_t lst_2 = args_0;
      for (; lst_2; lst_2 = lst_2->tl) {
         _fx_N14C_form__ctyp_t res_1 = 0;
         _fx_N14C_form__ctyp_t x_0 = lst_2->hd;
         FX_CALL(_fx_M6C_formFM10walk_ctyp_N14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(x_0, callb_0, &res_1, 0),
            _fx_catch_10);
         _fx_LN14C_form__ctyp_t node_2 = 0;
         FX_CALL(_fx_cons_LN14C_form__ctyp_t(res_1, 0, false, &node_2), _fx_catch_10);
         FX_LIST_APPEND(v_14, lstend_2, node_2);

      _fx_catch_10: ;
         if (res_1) {
            _fx_free_N14C_form__ctyp_t(&res_1);
         }
         FX_CHECK_EXN(_fx_catch_11);
      }
      FX_CALL(_fx_M6C_formFM10walk_ctyp_N14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(vcase_2->t1, callb_0, &v_15, 0),
         _fx_catch_11);
      FX_CALL(_fx_M6C_formFM13CTypFunRawPtrN14C_form__ctyp_t2LN14C_form__ctyp_tN14C_form__ctyp_t(v_14, v_15, fx_result),
         _fx_catch_11);

   _fx_catch_11: ;
      if (v_15) {
         _fx_free_N14C_form__ctyp_t(&v_15);
      }
      if (args_0) {
         _fx_free_LN14C_form__ctyp_t(&args_0);
      }
      if (v_14) {
         _fx_free_LN14C_form__ctyp_t(&v_14);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 19) {
      _fx_N14C_form__ctyp_t v_16 = 0;
      _fx_T2iN14C_form__ctyp_t* vcase_3 = &t_0->u.CTypArray;
      FX_CALL(_fx_M6C_formFM10walk_ctyp_N14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(vcase_3->t1, callb_0, &v_16, 0),
         _fx_catch_12);
      FX_CALL(_fx_M6C_formFM9CTypArrayN14C_form__ctyp_t2iN14C_form__ctyp_t(vcase_3->t0, v_16, fx_result), _fx_catch_12);

   _fx_catch_12: ;
      if (v_16) {
         _fx_free_N14C_form__ctyp_t(&v_16);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 20) {
      _fx_N14C_form__ctyp_t v_17 = 0;
      FX_CALL(_fx_M6C_formFM10walk_ctyp_N14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(t_0->u.CTypVector, callb_0, &v_17, 0),
         _fx_catch_13);
      FX_CALL(_fx_M6C_formFM10CTypVectorN14C_form__ctyp_t1N14C_form__ctyp_t(v_17, fx_result), _fx_catch_13);

   _fx_catch_13: ;
      if (v_17) {
         _fx_free_N14C_form__ctyp_t(&v_17);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 17) {
      _fx_N14C_form__ctyp_t v_18 = 0;
      _fx_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t* vcase_4 = &t_0->u.CTypRawPtr;
      FX_CALL(_fx_M6C_formFM10walk_ctyp_N14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(vcase_4->t1, callb_0, &v_18, 0),
         _fx_catch_14);
      FX_CALL(
         _fx_M6C_formFM10CTypRawPtrN14C_form__ctyp_t2LN19C_form__ctyp_attr_tN14C_form__ctyp_t(vcase_4->t0, v_18, fx_result),
         _fx_catch_14);

   _fx_catch_14: ;
      if (v_18) {
         _fx_free_N14C_form__ctyp_t(&v_18);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 18) {
      _fx_N14C_form__ctyp_t v_19 = 0;
      _fx_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t* vcase_5 = &t_0->u.CTypRawArray;
      FX_CALL(_fx_M6C_formFM10walk_ctyp_N14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(vcase_5->t1, callb_0, &v_19, 0),
         _fx_catch_15);
      FX_CALL(
         _fx_M6C_formFM12CTypRawArrayN14C_form__ctyp_t2LN19C_form__ctyp_attr_tN14C_form__ctyp_t(vcase_5->t0, v_19, fx_result),
         _fx_catch_15);

   _fx_catch_15: ;
      if (v_19) {
         _fx_free_N14C_form__ctyp_t(&v_19);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 21) {
      _fx_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t v_20 = 0;
      _fx_R9Ast__id_t* n_4 = &t_0->u.CTypName;
      FX_COPY_PTR(callb_0->ccb_ident, &v_20);
      _fx_R9Ast__id_t v_21;
      if ((v_20 != 0) + 1 == 2) {
         _fx_FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t* f_4 = &v_20->u.Some;
         FX_CALL(f_4->fp(n_4, callb_0, &v_21, f_4->fcv), _fx_catch_16);

      _fx_catch_16: ;
      }
      else {
         v_21 = *n_4;
      }
      FX_CHECK_EXN(_fx_catch_17);
      FX_CALL(_fx_M6C_formFM8CTypNameN14C_form__ctyp_t1R9Ast__id_t(&v_21, fx_result), _fx_catch_17);

   _fx_catch_17: ;
      if (v_20) {
         _fx_free_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t(&v_20);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 22) {
      FX_COPY_PTR(t_0, fx_result); goto _fx_endmatch_0;
   }
   FX_FAST_THROW(FX_EXN_NoMatchError, _fx_cleanup);

_fx_endmatch_0: ;

_fx_cleanup: ;
   return fx_status;
}

static int _fx_M6C_formFM10walk_ctyp_N14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_N14C_form__ctyp_t_data_t** fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   FX_CALL(_fx_M6C_formFM17check_n_walk_ctypN14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(t_0, callb_0, fx_result, 0),
      _fx_cleanup);

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM9walk_cexpN14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_N14C_form__cexp_t_data_t** fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   int tag_0 = FX_REC_VARIANT_TAG(e_0);
   if (tag_0 == 1) {
      _fx_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t v_0 = 0;
      _fx_N14C_form__ctyp_t t_0 = 0;
      _fx_N14C_form__ctyp_t v_1 = 0;
      _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_2 = {0};
      _fx_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_0 = &e_0->u.CExpIdent;
      _fx_T2N14C_form__ctyp_tR10Ast__loc_t* ctx_0 = &vcase_0->t1;
      _fx_R9Ast__id_t* n_0 = &vcase_0->t0;
      FX_COPY_PTR(callb_0->ccb_ident, &v_0);
      _fx_R9Ast__id_t v_3;
      if ((v_0 != 0) + 1 == 2) {
         _fx_FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t* f_0 = &v_0->u.Some;
         FX_CALL(f_0->fp(n_0, callb_0, &v_3, f_0->fcv), _fx_catch_0);

      _fx_catch_0: ;
      }
      else {
         v_3 = *n_0;
      }
      FX_CHECK_EXN(_fx_catch_1);
      FX_COPY_PTR(ctx_0->t0, &t_0);
      _fx_R10Ast__loc_t loc_0 = ctx_0->t1;
      FX_CALL(_fx_M6C_formFM17check_n_walk_ctypN14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(t_0, callb_0, &v_1, 0),
         _fx_catch_1);
      _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(v_1, &loc_0, &v_2);
      FX_CALL(_fx_M6C_formFM9CExpIdentN14C_form__cexp_t2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(&v_3, &v_2, fx_result),
         _fx_catch_1);

   _fx_catch_1: ;
      _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_2);
      if (v_1) {
         _fx_free_N14C_form__ctyp_t(&v_1);
      }
      if (t_0) {
         _fx_free_N14C_form__ctyp_t(&t_0);
      }
      if (v_0) {
         _fx_free_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t(&v_0);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 2) {
      _fx_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_1 = &e_0->u.CExpLit;
      _fx_N14K_form__klit_t* v_4 = &vcase_1->t0;
      if (v_4->tag == 8) {
         _fx_N14K_form__ktyp_t v_5 = v_4->u.KLitNil;
         if (FX_REC_VARIANT_TAG(v_5) == 16) {
            _fx_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t v_6 = 0;
            _fx_N14K_form__ktyp_t v_7 = 0;
            _fx_N14K_form__klit_t v_8 = {0};
            _fx_N14C_form__ctyp_t t_1 = 0;
            _fx_N14C_form__ctyp_t v_9 = 0;
            _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_10 = {0};
            _fx_R9Ast__id_t* n_1 = &v_5->u.KTypName;
            _fx_T2N14C_form__ctyp_tR10Ast__loc_t* ctx_1 = &vcase_1->t1;
            FX_COPY_PTR(callb_0->ccb_ident, &v_6);
            _fx_R9Ast__id_t v_11;
            if ((v_6 != 0) + 1 == 2) {
               _fx_FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t* f_1 = &v_6->u.Some;
               FX_CALL(f_1->fp(n_1, callb_0, &v_11, f_1->fcv), _fx_catch_2);

            _fx_catch_2: ;
            }
            else {
               v_11 = *n_1;
            }
            FX_CHECK_EXN(_fx_catch_3);
            FX_CALL(_fx_M6K_formFM8KTypNameN14K_form__ktyp_t1R9Ast__id_t(&v_11, &v_7), _fx_catch_3);
            _fx_M6K_formFM7KLitNilN14K_form__klit_t1N14K_form__ktyp_t(v_7, &v_8);
            FX_COPY_PTR(ctx_1->t0, &t_1);
            _fx_R10Ast__loc_t loc_1 = ctx_1->t1;
            FX_CALL(_fx_M6C_formFM17check_n_walk_ctypN14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(t_1, callb_0, &v_9, 0),
               _fx_catch_3);
            _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(v_9, &loc_1, &v_10);
            FX_CALL(
               _fx_M6C_formFM7CExpLitN14C_form__cexp_t2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t(&v_8, &v_10,
                  fx_result), _fx_catch_3);

         _fx_catch_3: ;
            _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_10);
            if (v_9) {
               _fx_free_N14C_form__ctyp_t(&v_9);
            }
            if (t_1) {
               _fx_free_N14C_form__ctyp_t(&t_1);
            }
            _fx_free_N14K_form__klit_t(&v_8);
            if (v_7) {
               _fx_free_N14K_form__ktyp_t(&v_7);
            }
            if (v_6) {
               _fx_free_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t(&v_6);
            }
            goto _fx_endmatch_0;
         }
      }
   }
   if (tag_0 == 2) {
      _fx_N14C_form__ctyp_t t_2 = 0;
      _fx_N14C_form__ctyp_t v_12 = 0;
      _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_13 = {0};
      _fx_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_2 = &e_0->u.CExpLit;
      _fx_T2N14C_form__ctyp_tR10Ast__loc_t* ctx_2 = &vcase_2->t1;
      FX_COPY_PTR(ctx_2->t0, &t_2);
      _fx_R10Ast__loc_t loc_2 = ctx_2->t1;
      FX_CALL(_fx_M6C_formFM17check_n_walk_ctypN14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(t_2, callb_0, &v_12, 0),
         _fx_catch_4);
      _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(v_12, &loc_2, &v_13);
      FX_CALL(
         _fx_M6C_formFM7CExpLitN14C_form__cexp_t2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t(&vcase_2->t0, &v_13,
            fx_result), _fx_catch_4);

   _fx_catch_4: ;
      _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_13);
      if (v_12) {
         _fx_free_N14C_form__ctyp_t(&v_12);
      }
      if (t_2) {
         _fx_free_N14C_form__ctyp_t(&t_2);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 3) {
      _fx_N14C_form__cexp_t v_14 = 0;
      _fx_N14C_form__cexp_t v_15 = 0;
      _fx_N14C_form__ctyp_t t_3 = 0;
      _fx_N14C_form__ctyp_t v_16 = 0;
      _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_17 = {0};
      _fx_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_3 =
         &e_0->u.CExpBinary;
      _fx_T2N14C_form__ctyp_tR10Ast__loc_t* ctx_3 = &vcase_3->t3;
      FX_CALL(_fx_M6C_formFM10walk_cexp_N14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(vcase_3->t1, callb_0, &v_14, 0),
         _fx_catch_5);
      FX_CALL(_fx_M6C_formFM10walk_cexp_N14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(vcase_3->t2, callb_0, &v_15, 0),
         _fx_catch_5);
      FX_COPY_PTR(ctx_3->t0, &t_3);
      _fx_R10Ast__loc_t loc_3 = ctx_3->t1;
      FX_CALL(_fx_M6C_formFM17check_n_walk_ctypN14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(t_3, callb_0, &v_16, 0),
         _fx_catch_5);
      _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(v_16, &loc_3, &v_17);
      FX_CALL(
         _fx_M6C_formFM10CExpBinaryN14C_form__cexp_t4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
            &vcase_3->t0, v_14, v_15, &v_17, fx_result), _fx_catch_5);

   _fx_catch_5: ;
      _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_17);
      if (v_16) {
         _fx_free_N14C_form__ctyp_t(&v_16);
      }
      if (t_3) {
         _fx_free_N14C_form__ctyp_t(&t_3);
      }
      if (v_15) {
         _fx_free_N14C_form__cexp_t(&v_15);
      }
      if (v_14) {
         _fx_free_N14C_form__cexp_t(&v_14);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 4) {
      _fx_N14C_form__cexp_t v_18 = 0;
      _fx_N14C_form__ctyp_t t_4 = 0;
      _fx_N14C_form__ctyp_t v_19 = 0;
      _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_20 = {0};
      _fx_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_4 = &e_0->u.CExpUnary;
      _fx_T2N14C_form__ctyp_tR10Ast__loc_t* ctx_4 = &vcase_4->t2;
      FX_CALL(_fx_M6C_formFM10walk_cexp_N14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(vcase_4->t1, callb_0, &v_18, 0),
         _fx_catch_6);
      FX_COPY_PTR(ctx_4->t0, &t_4);
      _fx_R10Ast__loc_t loc_4 = ctx_4->t1;
      FX_CALL(_fx_M6C_formFM17check_n_walk_ctypN14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(t_4, callb_0, &v_19, 0),
         _fx_catch_6);
      _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(v_19, &loc_4, &v_20);
      FX_CALL(
         _fx_M6C_formFM9CExpUnaryN14C_form__cexp_t3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
            &vcase_4->t0, v_18, &v_20, fx_result), _fx_catch_6);

   _fx_catch_6: ;
      _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_20);
      if (v_19) {
         _fx_free_N14C_form__ctyp_t(&v_19);
      }
      if (t_4) {
         _fx_free_N14C_form__ctyp_t(&t_4);
      }
      if (v_18) {
         _fx_free_N14C_form__cexp_t(&v_18);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 5) {
      _fx_N14C_form__cexp_t v_21 = 0;
      _fx_N14C_form__ctyp_t t_5 = 0;
      _fx_N14C_form__ctyp_t v_22 = 0;
      _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_23 = {0};
      _fx_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_5 = &e_0->u.CExpMem;
      _fx_T2N14C_form__ctyp_tR10Ast__loc_t* ctx_5 = &vcase_5->t2;
      FX_CALL(_fx_M6C_formFM10walk_cexp_N14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(vcase_5->t0, callb_0, &v_21, 0),
         _fx_catch_7);
      FX_COPY_PTR(ctx_5->t0, &t_5);
      _fx_R10Ast__loc_t loc_5 = ctx_5->t1;
      FX_CALL(_fx_M6C_formFM17check_n_walk_ctypN14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(t_5, callb_0, &v_22, 0),
         _fx_catch_7);
      _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(v_22, &loc_5, &v_23);
      FX_CALL(
         _fx_M6C_formFM7CExpMemN14C_form__cexp_t3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(v_21,
            &vcase_5->t1, &v_23, fx_result), _fx_catch_7);

   _fx_catch_7: ;
      _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_23);
      if (v_22) {
         _fx_free_N14C_form__ctyp_t(&v_22);
      }
      if (t_5) {
         _fx_free_N14C_form__ctyp_t(&t_5);
      }
      if (v_21) {
         _fx_free_N14C_form__cexp_t(&v_21);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 6) {
      _fx_N14C_form__cexp_t v_24 = 0;
      _fx_N14C_form__ctyp_t t_6 = 0;
      _fx_N14C_form__ctyp_t v_25 = 0;
      _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_26 = {0};
      _fx_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_6 = &e_0->u.CExpArrow;
      _fx_T2N14C_form__ctyp_tR10Ast__loc_t* ctx_6 = &vcase_6->t2;
      FX_CALL(_fx_M6C_formFM10walk_cexp_N14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(vcase_6->t0, callb_0, &v_24, 0),
         _fx_catch_8);
      FX_COPY_PTR(ctx_6->t0, &t_6);
      _fx_R10Ast__loc_t loc_6 = ctx_6->t1;
      FX_CALL(_fx_M6C_formFM17check_n_walk_ctypN14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(t_6, callb_0, &v_25, 0),
         _fx_catch_8);
      _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(v_25, &loc_6, &v_26);
      FX_CALL(
         _fx_M6C_formFM9CExpArrowN14C_form__cexp_t3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(v_24,
            &vcase_6->t1, &v_26, fx_result), _fx_catch_8);

   _fx_catch_8: ;
      _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_26);
      if (v_25) {
         _fx_free_N14C_form__ctyp_t(&v_25);
      }
      if (t_6) {
         _fx_free_N14C_form__ctyp_t(&t_6);
      }
      if (v_24) {
         _fx_free_N14C_form__cexp_t(&v_24);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 7) {
      _fx_N14C_form__cexp_t v_27 = 0;
      _fx_N14C_form__ctyp_t v_28 = 0;
      _fx_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t* vcase_7 = &e_0->u.CExpCast;
      FX_CALL(_fx_M6C_formFM10walk_cexp_N14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(vcase_7->t0, callb_0, &v_27, 0),
         _fx_catch_9);
      FX_CALL(_fx_M6C_formFM17check_n_walk_ctypN14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(vcase_7->t1, callb_0, &v_28, 0),
         _fx_catch_9);
      FX_CALL(
         _fx_M6C_formFM8CExpCastN14C_form__cexp_t3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t(v_27, v_28, &vcase_7->t2,
            fx_result), _fx_catch_9);

   _fx_catch_9: ;
      if (v_28) {
         _fx_free_N14C_form__ctyp_t(&v_28);
      }
      if (v_27) {
         _fx_free_N14C_form__cexp_t(&v_27);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 8) {
      _fx_N14C_form__cexp_t v_29 = 0;
      _fx_N14C_form__cexp_t v_30 = 0;
      _fx_N14C_form__cexp_t v_31 = 0;
      _fx_N14C_form__ctyp_t t_7 = 0;
      _fx_N14C_form__ctyp_t v_32 = 0;
      _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_33 = {0};
      _fx_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_8 = &e_0->u.CExpTernary;
      _fx_T2N14C_form__ctyp_tR10Ast__loc_t* ctx_7 = &vcase_8->t3;
      FX_CALL(_fx_M6C_formFM10walk_cexp_N14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(vcase_8->t0, callb_0, &v_29, 0),
         _fx_catch_10);
      FX_CALL(_fx_M6C_formFM10walk_cexp_N14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(vcase_8->t1, callb_0, &v_30, 0),
         _fx_catch_10);
      FX_CALL(_fx_M6C_formFM10walk_cexp_N14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(vcase_8->t2, callb_0, &v_31, 0),
         _fx_catch_10);
      FX_COPY_PTR(ctx_7->t0, &t_7);
      _fx_R10Ast__loc_t loc_7 = ctx_7->t1;
      FX_CALL(_fx_M6C_formFM17check_n_walk_ctypN14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(t_7, callb_0, &v_32, 0),
         _fx_catch_10);
      _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(v_32, &loc_7, &v_33);
      FX_CALL(
         _fx_M6C_formFM11CExpTernaryN14C_form__cexp_t4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
            v_29, v_30, v_31, &v_33, fx_result), _fx_catch_10);

   _fx_catch_10: ;
      _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_33);
      if (v_32) {
         _fx_free_N14C_form__ctyp_t(&v_32);
      }
      if (t_7) {
         _fx_free_N14C_form__ctyp_t(&t_7);
      }
      if (v_31) {
         _fx_free_N14C_form__cexp_t(&v_31);
      }
      if (v_30) {
         _fx_free_N14C_form__cexp_t(&v_30);
      }
      if (v_29) {
         _fx_free_N14C_form__cexp_t(&v_29);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 11) {
      _fx_N14C_form__ctyp_t v_34 = 0;
      _fx_T2N14C_form__ctyp_tR10Ast__loc_t* vcase_9 = &e_0->u.CExpTyp;
      FX_CALL(_fx_M6C_formFM17check_n_walk_ctypN14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(vcase_9->t0, callb_0, &v_34, 0),
         _fx_catch_11);
      FX_CALL(_fx_M6C_formFM7CExpTypN14C_form__cexp_t2N14C_form__ctyp_tR10Ast__loc_t(v_34, &vcase_9->t1, fx_result),
         _fx_catch_11);

   _fx_catch_11: ;
      if (v_34) {
         _fx_free_N14C_form__ctyp_t(&v_34);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 9) {
      _fx_N14C_form__cexp_t v_35 = 0;
      _fx_LN14C_form__cexp_t v_36 = 0;
      _fx_LN14C_form__cexp_t args_0 = 0;
      _fx_N14C_form__ctyp_t t_8 = 0;
      _fx_N14C_form__ctyp_t v_37 = 0;
      _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_38 = {0};
      _fx_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_10 = &e_0->u.CExpCall;
      _fx_T2N14C_form__ctyp_tR10Ast__loc_t* ctx_8 = &vcase_10->t2;
      FX_CALL(_fx_M6C_formFM10walk_cexp_N14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(vcase_10->t0, callb_0, &v_35, 0),
         _fx_catch_13);
      _fx_LN14C_form__cexp_t lstend_0 = 0;
      FX_COPY_PTR(vcase_10->t1, &args_0);
      _fx_LN14C_form__cexp_t lst_0 = args_0;
      for (; lst_0; lst_0 = lst_0->tl) {
         _fx_N14C_form__cexp_t res_0 = 0;
         _fx_N14C_form__cexp_t x_0 = lst_0->hd;
         FX_CALL(_fx_M6C_formFM10walk_cexp_N14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(x_0, callb_0, &res_0, 0),
            _fx_catch_12);
         _fx_LN14C_form__cexp_t node_0 = 0;
         FX_CALL(_fx_cons_LN14C_form__cexp_t(res_0, 0, false, &node_0), _fx_catch_12);
         FX_LIST_APPEND(v_36, lstend_0, node_0);

      _fx_catch_12: ;
         if (res_0) {
            _fx_free_N14C_form__cexp_t(&res_0);
         }
         FX_CHECK_EXN(_fx_catch_13);
      }
      FX_COPY_PTR(ctx_8->t0, &t_8);
      _fx_R10Ast__loc_t loc_8 = ctx_8->t1;
      FX_CALL(_fx_M6C_formFM17check_n_walk_ctypN14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(t_8, callb_0, &v_37, 0),
         _fx_catch_13);
      _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(v_37, &loc_8, &v_38);
      FX_CALL(
         _fx_M6C_formFM8CExpCallN14C_form__cexp_t3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(v_35,
            v_36, &v_38, fx_result), _fx_catch_13);

   _fx_catch_13: ;
      _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_38);
      if (v_37) {
         _fx_free_N14C_form__ctyp_t(&v_37);
      }
      if (t_8) {
         _fx_free_N14C_form__ctyp_t(&t_8);
      }
      if (args_0) {
         _fx_free_LN14C_form__cexp_t(&args_0);
      }
      if (v_36) {
         _fx_free_LN14C_form__cexp_t(&v_36);
      }
      if (v_35) {
         _fx_free_N14C_form__cexp_t(&v_35);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 10) {
      _fx_LN14C_form__cexp_t v_39 = 0;
      _fx_LN14C_form__cexp_t eseq_0 = 0;
      _fx_N14C_form__ctyp_t t_9 = 0;
      _fx_N14C_form__ctyp_t v_40 = 0;
      _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_41 = {0};
      _fx_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_11 = &e_0->u.CExpInit;
      _fx_T2N14C_form__ctyp_tR10Ast__loc_t* ctx_9 = &vcase_11->t1;
      _fx_LN14C_form__cexp_t lstend_1 = 0;
      FX_COPY_PTR(vcase_11->t0, &eseq_0);
      _fx_LN14C_form__cexp_t lst_1 = eseq_0;
      for (; lst_1; lst_1 = lst_1->tl) {
         _fx_N14C_form__cexp_t res_1 = 0;
         _fx_N14C_form__cexp_t x_1 = lst_1->hd;
         FX_CALL(_fx_M6C_formFM10walk_cexp_N14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(x_1, callb_0, &res_1, 0),
            _fx_catch_14);
         _fx_LN14C_form__cexp_t node_1 = 0;
         FX_CALL(_fx_cons_LN14C_form__cexp_t(res_1, 0, false, &node_1), _fx_catch_14);
         FX_LIST_APPEND(v_39, lstend_1, node_1);

      _fx_catch_14: ;
         if (res_1) {
            _fx_free_N14C_form__cexp_t(&res_1);
         }
         FX_CHECK_EXN(_fx_catch_15);
      }
      FX_COPY_PTR(ctx_9->t0, &t_9);
      _fx_R10Ast__loc_t loc_9 = ctx_9->t1;
      FX_CALL(_fx_M6C_formFM17check_n_walk_ctypN14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(t_9, callb_0, &v_40, 0),
         _fx_catch_15);
      _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(v_40, &loc_9, &v_41);
      FX_CALL(
         _fx_M6C_formFM8CExpInitN14C_form__cexp_t2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(v_39, &v_41, fx_result),
         _fx_catch_15);

   _fx_catch_15: ;
      _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_41);
      if (v_40) {
         _fx_free_N14C_form__ctyp_t(&v_40);
      }
      if (t_9) {
         _fx_free_N14C_form__ctyp_t(&t_9);
      }
      if (eseq_0) {
         _fx_free_LN14C_form__cexp_t(&eseq_0);
      }
      if (v_39) {
         _fx_free_LN14C_form__cexp_t(&v_39);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 12) {
      FX_COPY_PTR(e_0, fx_result); goto _fx_endmatch_0;
   }
   FX_FAST_THROW(FX_EXN_NoMatchError, _fx_cleanup);

_fx_endmatch_0: ;

_fx_cleanup: ;
   return fx_status;
}

static int _fx_M6C_formFM10walk_cexp_N14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_N14C_form__cexp_t_data_t** fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   FX_CALL(_fx_M6C_formFM17check_n_walk_cexpN14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(e_0, callb_0, fx_result, 0),
      _fx_cleanup);

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM10walk_cstmtN15C_form__cstmt_t2N15C_form__cstmt_tRM9c_callb_t(
   struct _fx_N15C_form__cstmt_t_data_t* s_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result,
   void* fx_fv)
{
   _fx_FPR9Ast__id_t1R9Ast__id_t walk_id__0 = {0};
   _fx_FPN15C_form__cstmt_t1N15C_form__cstmt_t walk_cstmt__0 = {0};
   _fx_FPLN15C_form__cstmt_t2LN15C_form__cstmt_tR17C_form__c_callb_t walk_csl__0 = {0};
   int fx_status = 0;
   _fx_M6C_formFM7make_fpFPR9Ast__id_t1R9Ast__id_t1RM9c_callb_t(callb_0, &walk_id__0);
   _fx_M6C_formFM7make_fpFPN15C_form__cstmt_t1N15C_form__cstmt_t1RM9c_callb_t(callb_0, &walk_cstmt__0);
   _fx_M6C_formFM7make_fpFPLN15C_form__cstmt_t2LN15C_form__cstmt_tRM9c_callb_t1RM9c_callb_t(callb_0, &walk_csl__0);
   int tag_0 = FX_REC_VARIANT_TAG(s_0);
   if (tag_0 == 1) {
      FX_COPY_PTR(s_0, fx_result);
   }
   else if (tag_0 == 2) {
      FX_COPY_PTR(s_0, fx_result);
   }
   else if (tag_0 == 3) {
      _fx_N14C_form__cexp_t v_0 = 0;
      FX_CALL(_fx_M6C_formFM12walk_cexp_1_N14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(s_0->u.CExp, callb_0, &v_0, 0),
         _fx_catch_0);
      FX_CALL(_fx_M6C_formFM4CExpN15C_form__cstmt_t1N14C_form__cexp_t(v_0, fx_result), _fx_catch_0);

   _fx_catch_0: ;
      if (v_0) {
         _fx_free_N14C_form__cexp_t(&v_0);
      }
   }
   else if (tag_0 == 4) {
      FX_COPY_PTR(s_0, fx_result);
   }
   else if (tag_0 == 5) {
      FX_COPY_PTR(s_0, fx_result);
   }
   else if (tag_0 == 6) {
      _fx_Nt6option1N14C_form__cexp_t v_1 = {0};
      _fx_T2Nt6option1N14C_form__cexp_tR10Ast__loc_t* vcase_0 = &s_0->u.CStmtReturn;
      FX_CALL(
         _fx_M6C_formFM14walk_cexp_opt_Nt6option1N14C_form__cexp_t2Nt6option1N14C_form__cexp_tRM9c_callb_t(&vcase_0->t0,
            callb_0, &v_1, 0), _fx_catch_1);
      FX_CALL(
         _fx_M6C_formFM11CStmtReturnN15C_form__cstmt_t2Nt6option1N14C_form__cexp_tR10Ast__loc_t(&v_1, &vcase_0->t1, fx_result),
         _fx_catch_1);

   _fx_catch_1: ;
      _fx_free_Nt6option1N14C_form__cexp_t(&v_1);
   }
   else if (tag_0 == 7) {
      _fx_LN15C_form__cstmt_t v_2 = 0;
      _fx_T2LN15C_form__cstmt_tR10Ast__loc_t* vcase_1 = &s_0->u.CStmtBlock;
      FX_CALL(walk_csl__0.fp(vcase_1->t0, callb_0, &v_2, walk_csl__0.fcv), _fx_catch_2);
      FX_CALL(_fx_M6C_formFM10CStmtBlockN15C_form__cstmt_t2LN15C_form__cstmt_tR10Ast__loc_t(v_2, &vcase_1->t1, fx_result),
         _fx_catch_2);

   _fx_catch_2: ;
      if (v_2) {
         _fx_free_LN15C_form__cstmt_t(&v_2);
      }
   }
   else if (tag_0 == 8) {
      _fx_N15C_form__cstmt_t v_3 = 0;
      _fx_T2R9Ast__id_tN15C_form__cstmt_t* vcase_2 = &s_0->u.CStmtSync;
      FX_CALL(walk_cstmt__0.fp(vcase_2->t1, &v_3, walk_cstmt__0.fcv), _fx_catch_3);
      FX_CALL(_fx_M6C_formFM9CStmtSyncN15C_form__cstmt_t2R9Ast__id_tN15C_form__cstmt_t(&vcase_2->t0, v_3, fx_result),
         _fx_catch_3);

   _fx_catch_3: ;
      if (v_3) {
         _fx_free_N15C_form__cstmt_t(&v_3);
      }
   }
   else if (tag_0 == 9) {
      _fx_N14C_form__cexp_t v_4 = 0;
      _fx_N15C_form__cstmt_t v_5 = 0;
      _fx_N15C_form__cstmt_t v_6 = 0;
      _fx_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t* vcase_3 = &s_0->u.CStmtIf;
      FX_CALL(_fx_M6C_formFM12walk_cexp_1_N14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(vcase_3->t0, callb_0, &v_4, 0),
         _fx_catch_4);
      FX_CALL(walk_cstmt__0.fp(vcase_3->t1, &v_5, walk_cstmt__0.fcv), _fx_catch_4);
      FX_CALL(walk_cstmt__0.fp(vcase_3->t2, &v_6, walk_cstmt__0.fcv), _fx_catch_4);
      FX_CALL(
         _fx_M6C_formFM7CStmtIfN15C_form__cstmt_t4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t(v_4, v_5,
            v_6, &vcase_3->t3, fx_result), _fx_catch_4);

   _fx_catch_4: ;
      if (v_6) {
         _fx_free_N15C_form__cstmt_t(&v_6);
      }
      if (v_5) {
         _fx_free_N15C_form__cstmt_t(&v_5);
      }
      if (v_4) {
         _fx_free_N14C_form__cexp_t(&v_4);
      }
   }
   else if (tag_0 == 10) {
      _fx_T2R9Ast__id_tR10Ast__loc_t* vcase_4 = &s_0->u.CStmtGoto;
      _fx_R9Ast__id_t v_7;
      FX_CALL(walk_id__0.fp(&vcase_4->t0, &v_7, walk_id__0.fcv), _fx_catch_5);
      FX_CALL(_fx_M6C_formFM9CStmtGotoN15C_form__cstmt_t2R9Ast__id_tR10Ast__loc_t(&v_7, &vcase_4->t1, fx_result), _fx_catch_5);

   _fx_catch_5: ;
   }
   else if (tag_0 == 11) {
      _fx_T2R9Ast__id_tR10Ast__loc_t* vcase_5 = &s_0->u.CStmtLabel;
      _fx_R9Ast__id_t v_8;
      FX_CALL(walk_id__0.fp(&vcase_5->t0, &v_8, walk_id__0.fcv), _fx_catch_6);
      FX_CALL(_fx_M6C_formFM10CStmtLabelN15C_form__cstmt_t2R9Ast__id_tR10Ast__loc_t(&v_8, &vcase_5->t1, fx_result),
         _fx_catch_6);

   _fx_catch_6: ;
   }
   else if (tag_0 == 12) {
      _fx_Nt6option1N14C_form__ctyp_t v_9 = {0};
      _fx_LN14C_form__cexp_t v_10 = 0;
      _fx_Nt6option1N14C_form__cexp_t v_11 = {0};
      _fx_LN14C_form__cexp_t v_12 = 0;
      _fx_N15C_form__cstmt_t v_13 = 0;
      _fx_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t*
         vcase_6 = &s_0->u.CStmtFor;
      FX_CALL(
         _fx_M6C_formFM14walk_ctyp_opt_Nt6option1N14C_form__ctyp_t2Nt6option1N14C_form__ctyp_tRM9c_callb_t(&vcase_6->t0,
            callb_0, &v_9, 0), _fx_catch_7);
      FX_CALL(_fx_M6C_formFM9walk_cel_LN14C_form__cexp_t2LN14C_form__cexp_tRM9c_callb_t(vcase_6->t1, callb_0, &v_10, 0),
         _fx_catch_7);
      FX_CALL(
         _fx_M6C_formFM14walk_cexp_opt_Nt6option1N14C_form__cexp_t2Nt6option1N14C_form__cexp_tRM9c_callb_t(&vcase_6->t2,
            callb_0, &v_11, 0), _fx_catch_7);
      FX_CALL(_fx_M6C_formFM9walk_cel_LN14C_form__cexp_t2LN14C_form__cexp_tRM9c_callb_t(vcase_6->t3, callb_0, &v_12, 0),
         _fx_catch_7);
      FX_CALL(walk_cstmt__0.fp(vcase_6->t4, &v_13, walk_cstmt__0.fcv), _fx_catch_7);
      FX_CALL(
         _fx_M6C_formFM8CStmtForN15C_form__cstmt_t6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t(
            &v_9, v_10, &v_11, v_12, v_13, &vcase_6->t5, fx_result), _fx_catch_7);

   _fx_catch_7: ;
      if (v_13) {
         _fx_free_N15C_form__cstmt_t(&v_13);
      }
      if (v_12) {
         _fx_free_LN14C_form__cexp_t(&v_12);
      }
      _fx_free_Nt6option1N14C_form__cexp_t(&v_11);
      if (v_10) {
         _fx_free_LN14C_form__cexp_t(&v_10);
      }
      _fx_free_Nt6option1N14C_form__ctyp_t(&v_9);
   }
   else if (tag_0 == 13) {
      _fx_N14C_form__cexp_t v_14 = 0;
      _fx_N15C_form__cstmt_t v_15 = 0;
      _fx_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t* vcase_7 = &s_0->u.CStmtWhile;
      FX_CALL(_fx_M6C_formFM12walk_cexp_1_N14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(vcase_7->t0, callb_0, &v_14, 0),
         _fx_catch_8);
      FX_CALL(walk_cstmt__0.fp(vcase_7->t1, &v_15, walk_cstmt__0.fcv), _fx_catch_8);
      FX_CALL(
         _fx_M6C_formFM10CStmtWhileN15C_form__cstmt_t3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t(v_14, v_15, &vcase_7->t2,
            fx_result), _fx_catch_8);

   _fx_catch_8: ;
      if (v_15) {
         _fx_free_N15C_form__cstmt_t(&v_15);
      }
      if (v_14) {
         _fx_free_N14C_form__cexp_t(&v_14);
      }
   }
   else if (tag_0 == 14) {
      _fx_N15C_form__cstmt_t v_16 = 0;
      _fx_N14C_form__cexp_t v_17 = 0;
      _fx_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t* vcase_8 = &s_0->u.CStmtDoWhile;
      FX_CALL(walk_cstmt__0.fp(vcase_8->t0, &v_16, walk_cstmt__0.fcv), _fx_catch_9);
      FX_CALL(_fx_M6C_formFM12walk_cexp_1_N14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(vcase_8->t1, callb_0, &v_17, 0),
         _fx_catch_9);
      FX_CALL(
         _fx_M6C_formFM12CStmtDoWhileN15C_form__cstmt_t3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t(v_16, v_17,
            &vcase_8->t2, fx_result), _fx_catch_9);

   _fx_catch_9: ;
      if (v_17) {
         _fx_free_N14C_form__cexp_t(&v_17);
      }
      if (v_16) {
         _fx_free_N15C_form__cstmt_t(&v_16);
      }
   }
   else if (tag_0 == 15) {
      _fx_N14C_form__cexp_t v_18 = 0;
      _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t v_19 = 0;
      _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t cases_0 = 0;
      _fx_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t* vcase_9 = &s_0->u.CStmtSwitch;
      FX_CALL(_fx_M6C_formFM12walk_cexp_1_N14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(vcase_9->t0, callb_0, &v_18, 0),
         _fx_catch_11);
      _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t lstend_0 = 0;
      FX_COPY_PTR(vcase_9->t1, &cases_0);
      _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t lst_0 = cases_0;
      for (; lst_0; lst_0 = lst_0->tl) {
         _fx_LN14C_form__cexp_t ll_0 = 0;
         _fx_LN15C_form__cstmt_t sl_0 = 0;
         _fx_LN14C_form__cexp_t v_20 = 0;
         _fx_LN15C_form__cstmt_t v_21 = 0;
         _fx_T2LN14C_form__cexp_tLN15C_form__cstmt_t tup_0 = {0};
         _fx_T2LN14C_form__cexp_tLN15C_form__cstmt_t* __pat___0 = &lst_0->hd;
         FX_COPY_PTR(__pat___0->t0, &ll_0);
         FX_COPY_PTR(__pat___0->t1, &sl_0);
         FX_CALL(_fx_M6C_formFM9walk_cel_LN14C_form__cexp_t2LN14C_form__cexp_tRM9c_callb_t(ll_0, callb_0, &v_20, 0),
            _fx_catch_10);
         FX_CALL(walk_csl__0.fp(sl_0, callb_0, &v_21, walk_csl__0.fcv), _fx_catch_10);
         _fx_make_T2LN14C_form__cexp_tLN15C_form__cstmt_t(v_20, v_21, &tup_0);
         _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t node_0 = 0;
         FX_CALL(_fx_cons_LT2LN14C_form__cexp_tLN15C_form__cstmt_t(&tup_0, 0, false, &node_0), _fx_catch_10);
         FX_LIST_APPEND(v_19, lstend_0, node_0);

      _fx_catch_10: ;
         _fx_free_T2LN14C_form__cexp_tLN15C_form__cstmt_t(&tup_0);
         if (v_21) {
            _fx_free_LN15C_form__cstmt_t(&v_21);
         }
         if (v_20) {
            _fx_free_LN14C_form__cexp_t(&v_20);
         }
         if (sl_0) {
            _fx_free_LN15C_form__cstmt_t(&sl_0);
         }
         if (ll_0) {
            _fx_free_LN14C_form__cexp_t(&ll_0);
         }
         FX_CHECK_EXN(_fx_catch_11);
      }
      FX_CALL(
         _fx_M6C_formFM11CStmtSwitchN15C_form__cstmt_t3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t(
            v_18, v_19, &vcase_9->t2, fx_result), _fx_catch_11);

   _fx_catch_11: ;
      if (cases_0) {
         _fx_free_LT2LN14C_form__cexp_tLN15C_form__cstmt_t(&cases_0);
      }
      if (v_19) {
         _fx_free_LT2LN14C_form__cexp_tLN15C_form__cstmt_t(&v_19);
      }
      if (v_18) {
         _fx_free_N14C_form__cexp_t(&v_18);
      }
   }
   else if (tag_0 == 16) {
      _fx_N14C_form__ctyp_t v_22 = 0;
      _fx_Nt6option1N14C_form__cexp_t v_23 = {0};
      _fx_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t* vcase_10 = &s_0->u.CDefVal;
      FX_CALL(_fx_M6C_formFM12walk_ctyp_1_N14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(vcase_10->t0, callb_0, &v_22, 0),
         _fx_catch_12);
      _fx_R9Ast__id_t v_24;
      FX_CALL(walk_id__0.fp(&vcase_10->t1, &v_24, walk_id__0.fcv), _fx_catch_12);
      FX_CALL(
         _fx_M6C_formFM14walk_cexp_opt_Nt6option1N14C_form__cexp_t2Nt6option1N14C_form__cexp_tRM9c_callb_t(&vcase_10->t2,
            callb_0, &v_23, 0), _fx_catch_12);
      FX_CALL(
         _fx_M6C_formFM7CDefValN15C_form__cstmt_t4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t(v_22,
            &v_24, &v_23, &vcase_10->t3, fx_result), _fx_catch_12);

   _fx_catch_12: ;
      _fx_free_Nt6option1N14C_form__cexp_t(&v_23);
      if (v_22) {
         _fx_free_N14C_form__ctyp_t(&v_22);
      }
   }
   else if (tag_0 == 17) {
      _fx_LN15C_form__cstmt_t cf_body_0 = 0;
      _fx_N14C_form__ctyp_t cf_rt_0 = 0;
      _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t cf_args_0 = 0;
      _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t v_25 = 0;
      _fx_N14C_form__ctyp_t v_26 = 0;
      _fx_LN15C_form__cstmt_t v_27 = 0;
      _fx_R17C_form__cdeffun_t v_28 = {0};
      _fx_rR17C_form__cdeffun_t cf_0 = s_0->u.CDefFun;
      _fx_R17C_form__cdeffun_t* v_29 = &cf_0->data;
      FX_COPY_PTR(v_29->cf_body, &cf_body_0);
      FX_COPY_PTR(v_29->cf_rt, &cf_rt_0);
      FX_COPY_PTR(v_29->cf_args, &cf_args_0);
      _fx_R9Ast__id_t cf_name_0 = v_29->cf_name;
      _fx_R17C_form__cdeffun_t* v_30 = &cf_0->data;
      _fx_R9Ast__id_t v_31;
      FX_CALL(walk_id__0.fp(&cf_name_0, &v_31, walk_id__0.fcv), _fx_catch_14);
      _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t lstend_1 = 0;
      _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t lst_1 = cf_args_0;
      for (; lst_1; lst_1 = lst_1->tl) {
         _fx_N14C_form__ctyp_t t_0 = 0;
         _fx_LN19C_form__carg_attr_t flags_0 = 0;
         _fx_N14C_form__ctyp_t v_32 = 0;
         _fx_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t tup_1 = {0};
         _fx_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t* __pat___1 = &lst_1->hd;
         _fx_R9Ast__id_t a_0 = __pat___1->t0;
         FX_COPY_PTR(__pat___1->t1, &t_0);
         FX_COPY_PTR(__pat___1->t2, &flags_0);
         _fx_R9Ast__id_t v_33;
         FX_CALL(walk_id__0.fp(&a_0, &v_33, walk_id__0.fcv), _fx_catch_13);
         FX_CALL(_fx_M6C_formFM12walk_ctyp_1_N14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(t_0, callb_0, &v_32, 0),
            _fx_catch_13);
         _fx_make_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t(&v_33, v_32, flags_0, &tup_1);
         _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t node_1 = 0;
         FX_CALL(_fx_cons_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t(&tup_1, 0, false, &node_1), _fx_catch_13);
         FX_LIST_APPEND(v_25, lstend_1, node_1);

      _fx_catch_13: ;
         _fx_free_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t(&tup_1);
         if (v_32) {
            _fx_free_N14C_form__ctyp_t(&v_32);
         }
         FX_FREE_LIST_SIMPLE(&flags_0);
         if (t_0) {
            _fx_free_N14C_form__ctyp_t(&t_0);
         }
         FX_CHECK_EXN(_fx_catch_14);
      }
      FX_CALL(_fx_M6C_formFM12walk_ctyp_1_N14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(cf_rt_0, callb_0, &v_26, 0),
         _fx_catch_14);
      FX_CALL(walk_csl__0.fp(cf_body_0, callb_0, &v_27, walk_csl__0.fcv), _fx_catch_14);
      _fx_make_R17C_form__cdeffun_t(&v_31, &v_30->cf_cname, v_25, v_26, v_27, &v_30->cf_flags, v_30->cf_scope, &v_30->cf_loc,
         &v_28);
      _fx_R17C_form__cdeffun_t* v_34 = &cf_0->data;
      _fx_free_R17C_form__cdeffun_t(v_34);
      _fx_copy_R17C_form__cdeffun_t(&v_28, v_34);
      FX_COPY_PTR(s_0, fx_result);

   _fx_catch_14: ;
      _fx_free_R17C_form__cdeffun_t(&v_28);
      if (v_27) {
         _fx_free_LN15C_form__cstmt_t(&v_27);
      }
      if (v_26) {
         _fx_free_N14C_form__ctyp_t(&v_26);
      }
      if (v_25) {
         _fx_free_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t(&v_25);
      }
      if (cf_args_0) {
         _fx_free_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t(&cf_args_0);
      }
      if (cf_rt_0) {
         _fx_free_N14C_form__ctyp_t(&cf_rt_0);
      }
      if (cf_body_0) {
         _fx_free_LN15C_form__cstmt_t(&cf_body_0);
      }
   }
   else if (tag_0 == 18) {
      _fx_N14C_form__ctyp_t ct_typ_0 = 0;
      _fx_N14C_form__ctyp_t v_35 = 0;
      _fx_R17C_form__cdeftyp_t v_36 = {0};
      _fx_rR17C_form__cdeftyp_t ct_0 = s_0->u.CDefTyp;
      _fx_R17C_form__cdeftyp_t* v_37 = &ct_0->data;
      _fx_R9Ast__id_t ct_enum_0 = v_37->ct_enum;
      FX_COPY_PTR(v_37->ct_typ, &ct_typ_0);
      _fx_R9Ast__id_t ct_name_0 = v_37->ct_name;
      _fx_R17C_form__cdeftyp_t* v_38 = &ct_0->data;
      _fx_R9Ast__id_t v_39;
      FX_CALL(walk_id__0.fp(&ct_name_0, &v_39, walk_id__0.fcv), _fx_catch_15);
      FX_CALL(_fx_M6C_formFM12walk_ctyp_1_N14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(ct_typ_0, callb_0, &v_35, 0),
         _fx_catch_15);
      _fx_R9Ast__id_t v_40;
      FX_CALL(walk_id__0.fp(&ct_enum_0, &v_40, walk_id__0.fcv), _fx_catch_15);
      _fx_make_R17C_form__cdeftyp_t(&v_39, v_35, &v_38->ct_cname, &v_38->ct_props, v_38->ct_data_start, &v_40, v_38->ct_ifaces,
         &v_38->ct_ifaces_id, v_38->ct_scope, &v_38->ct_loc, &v_36);
      _fx_R17C_form__cdeftyp_t* v_41 = &ct_0->data;
      _fx_free_R17C_form__cdeftyp_t(v_41);
      _fx_copy_R17C_form__cdeftyp_t(&v_36, v_41);
      FX_COPY_PTR(s_0, fx_result);

   _fx_catch_15: ;
      _fx_free_R17C_form__cdeftyp_t(&v_36);
      if (v_35) {
         _fx_free_N14C_form__ctyp_t(&v_35);
      }
      if (ct_typ_0) {
         _fx_free_N14C_form__ctyp_t(&ct_typ_0);
      }
   }
   else if (tag_0 == 19) {
      _fx_T2R9Ast__id_tR10Ast__loc_t* vcase_11 = &s_0->u.CDefForwardSym;
      _fx_R9Ast__id_t v_42;
      FX_CALL(walk_id__0.fp(&vcase_11->t0, &v_42, walk_id__0.fcv), _fx_catch_16);
      FX_CALL(_fx_M6C_formFM14CDefForwardSymN15C_form__cstmt_t2R9Ast__id_tR10Ast__loc_t(&v_42, &vcase_11->t1, fx_result),
         _fx_catch_16);

   _fx_catch_16: ;
   }
   else if (tag_0 == 20) {
      _fx_T2R9Ast__id_tR10Ast__loc_t* vcase_12 = &s_0->u.CDefForwardTyp;
      _fx_R9Ast__id_t v_43;
      FX_CALL(walk_id__0.fp(&vcase_12->t0, &v_43, walk_id__0.fcv), _fx_catch_17);
      FX_CALL(_fx_M6C_formFM14CDefForwardTypN15C_form__cstmt_t2R9Ast__id_tR10Ast__loc_t(&v_43, &vcase_12->t1, fx_result),
         _fx_catch_17);

   _fx_catch_17: ;
   }
   else if (tag_0 == 21) {
      _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t cenum_members_0 = 0;
      _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t v_44 = 0;
      _fx_R18C_form__cdefenum_t v_45 = {0};
      _fx_rR18C_form__cdefenum_t ce_0 = s_0->u.CDefEnum;
      _fx_R18C_form__cdefenum_t* v_46 = &ce_0->data;
      FX_COPY_PTR(v_46->cenum_members, &cenum_members_0);
      _fx_R9Ast__id_t cenum_name_0 = v_46->cenum_name;
      _fx_R18C_form__cdefenum_t* v_47 = &ce_0->data;
      _fx_R9Ast__id_t v_48;
      FX_CALL(walk_id__0.fp(&cenum_name_0, &v_48, walk_id__0.fcv), _fx_catch_19);
      _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t lstend_2 = 0;
      _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t lst_2 = cenum_members_0;
      for (; lst_2; lst_2 = lst_2->tl) {
         _fx_Nt6option1N14C_form__cexp_t e_opt_0 = {0};
         _fx_Nt6option1N14C_form__cexp_t v_49 = {0};
         _fx_T2R9Ast__id_tNt6option1N14C_form__cexp_t tup_2 = {0};
         _fx_T2R9Ast__id_tNt6option1N14C_form__cexp_t* __pat___2 = &lst_2->hd;
         _fx_R9Ast__id_t n_0 = __pat___2->t0;
         _fx_copy_Nt6option1N14C_form__cexp_t(&__pat___2->t1, &e_opt_0);
         _fx_R9Ast__id_t v_50;
         FX_CALL(walk_id__0.fp(&n_0, &v_50, walk_id__0.fcv), _fx_catch_18);
         FX_CALL(
            _fx_M6C_formFM14walk_cexp_opt_Nt6option1N14C_form__cexp_t2Nt6option1N14C_form__cexp_tRM9c_callb_t(&e_opt_0, callb_0,
               &v_49, 0), _fx_catch_18);
         _fx_make_T2R9Ast__id_tNt6option1N14C_form__cexp_t(&v_50, &v_49, &tup_2);
         _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t node_2 = 0;
         FX_CALL(_fx_cons_LT2R9Ast__id_tNt6option1N14C_form__cexp_t(&tup_2, 0, false, &node_2), _fx_catch_18);
         FX_LIST_APPEND(v_44, lstend_2, node_2);

      _fx_catch_18: ;
         _fx_free_T2R9Ast__id_tNt6option1N14C_form__cexp_t(&tup_2);
         _fx_free_Nt6option1N14C_form__cexp_t(&v_49);
         _fx_free_Nt6option1N14C_form__cexp_t(&e_opt_0);
         FX_CHECK_EXN(_fx_catch_19);
      }
      _fx_make_R18C_form__cdefenum_t(&v_48, v_44, &v_47->cenum_cname, v_47->cenum_scope, &v_47->cenum_loc, &v_45);
      _fx_R18C_form__cdefenum_t* v_51 = &ce_0->data;
      _fx_free_R18C_form__cdefenum_t(v_51);
      _fx_copy_R18C_form__cdefenum_t(&v_45, v_51);
      FX_COPY_PTR(s_0, fx_result);

   _fx_catch_19: ;
      _fx_free_R18C_form__cdefenum_t(&v_45);
      if (v_44) {
         _fx_free_LT2R9Ast__id_tNt6option1N14C_form__cexp_t(&v_44);
      }
      if (cenum_members_0) {
         _fx_free_LT2R9Ast__id_tNt6option1N14C_form__cexp_t(&cenum_members_0);
      }
   }
   else if (tag_0 == 22) {
      _fx_LT2R9Ast__id_tN14C_form__ctyp_t ci_all_methods_0 = 0;
      _fx_LT2R9Ast__id_tN14C_form__ctyp_t v_52 = 0;
      _fx_R23C_form__cdefinterface_t v_53 = {0};
      _fx_rR23C_form__cdefinterface_t ci_0 = s_0->u.CDefInterface;
      _fx_R23C_form__cdefinterface_t* v_54 = &ci_0->data;
      FX_COPY_PTR(v_54->ci_all_methods, &ci_all_methods_0);
      _fx_R9Ast__id_t ci_vtbl_0 = v_54->ci_vtbl;
      _fx_R9Ast__id_t ci_id_0 = v_54->ci_id;
      _fx_R9Ast__id_t ci_base_0 = v_54->ci_base;
      _fx_R9Ast__id_t ci_name_0 = v_54->ci_name;
      _fx_R23C_form__cdefinterface_t* v_55 = &ci_0->data;
      _fx_R9Ast__id_t v_56;
      FX_CALL(walk_id__0.fp(&ci_name_0, &v_56, walk_id__0.fcv), _fx_catch_21);
      _fx_R9Ast__id_t v_57;
      FX_CALL(walk_id__0.fp(&ci_id_0, &v_57, walk_id__0.fcv), _fx_catch_21);
      _fx_R9Ast__id_t v_58;
      FX_CALL(walk_id__0.fp(&ci_vtbl_0, &v_58, walk_id__0.fcv), _fx_catch_21);
      _fx_R9Ast__id_t v_59;
      FX_CALL(walk_id__0.fp(&ci_base_0, &v_59, walk_id__0.fcv), _fx_catch_21);
      _fx_LT2R9Ast__id_tN14C_form__ctyp_t lstend_3 = 0;
      _fx_LT2R9Ast__id_tN14C_form__ctyp_t lst_3 = ci_all_methods_0;
      for (; lst_3; lst_3 = lst_3->tl) {
         _fx_N14C_form__ctyp_t ctyp_0 = 0;
         _fx_N14C_form__ctyp_t v_60 = 0;
         _fx_T2R9Ast__id_tN14C_form__ctyp_t tup_3 = {0};
         _fx_T2R9Ast__id_tN14C_form__ctyp_t* __pat___3 = &lst_3->hd;
         _fx_R9Ast__id_t f_0 = __pat___3->t0;
         FX_COPY_PTR(__pat___3->t1, &ctyp_0);
         _fx_R9Ast__id_t v_61;
         FX_CALL(walk_id__0.fp(&f_0, &v_61, walk_id__0.fcv), _fx_catch_20);
         FX_CALL(_fx_M6C_formFM12walk_ctyp_1_N14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(ctyp_0, callb_0, &v_60, 0),
            _fx_catch_20);
         _fx_make_T2R9Ast__id_tN14C_form__ctyp_t(&v_61, v_60, &tup_3);
         _fx_LT2R9Ast__id_tN14C_form__ctyp_t node_3 = 0;
         FX_CALL(_fx_cons_LT2R9Ast__id_tN14C_form__ctyp_t(&tup_3, 0, false, &node_3), _fx_catch_20);
         FX_LIST_APPEND(v_52, lstend_3, node_3);

      _fx_catch_20: ;
         _fx_free_T2R9Ast__id_tN14C_form__ctyp_t(&tup_3);
         if (v_60) {
            _fx_free_N14C_form__ctyp_t(&v_60);
         }
         if (ctyp_0) {
            _fx_free_N14C_form__ctyp_t(&ctyp_0);
         }
         FX_CHECK_EXN(_fx_catch_21);
      }
      _fx_make_R23C_form__cdefinterface_t(&v_56, &v_55->ci_cname, &v_57, &v_58, &v_59, v_52, v_55->ci_scope, &v_55->ci_loc,
         &v_53);
      _fx_R23C_form__cdefinterface_t* v_62 = &ci_0->data;
      _fx_free_R23C_form__cdefinterface_t(v_62);
      _fx_copy_R23C_form__cdefinterface_t(&v_53, v_62);
      FX_COPY_PTR(s_0, fx_result);

   _fx_catch_21: ;
      _fx_free_R23C_form__cdefinterface_t(&v_53);
      if (v_52) {
         _fx_free_LT2R9Ast__id_tN14C_form__ctyp_t(&v_52);
      }
      if (ci_all_methods_0) {
         _fx_free_LT2R9Ast__id_tN14C_form__ctyp_t(&ci_all_methods_0);
      }
   }
   else if (tag_0 == 23) {
      _fx_LN15C_form__cstmt_t cm_body_0 = 0;
      _fx_LR9Ast__id_t cm_args_0 = 0;
      _fx_LR9Ast__id_t v_63 = 0;
      _fx_LN15C_form__cstmt_t v_64 = 0;
      _fx_R19C_form__cdefmacro_t v_65 = {0};
      _fx_rR19C_form__cdefmacro_t cm_0 = s_0->u.CMacroDef;
      _fx_R19C_form__cdefmacro_t* v_66 = &cm_0->data;
      FX_COPY_PTR(v_66->cm_body, &cm_body_0);
      FX_COPY_PTR(v_66->cm_args, &cm_args_0);
      _fx_R9Ast__id_t cm_name_0 = v_66->cm_name;
      _fx_R19C_form__cdefmacro_t* v_67 = &cm_0->data;
      _fx_R9Ast__id_t v_68;
      FX_CALL(walk_id__0.fp(&cm_name_0, &v_68, walk_id__0.fcv), _fx_catch_22);
      FX_CALL(_fx_M6C_formFM3mapLR9Ast__id_t2LR9Ast__id_tFPR9Ast__id_t1R9Ast__id_t(cm_args_0, &walk_id__0, &v_63, 0),
         _fx_catch_22);
      FX_CALL(
         _fx_M6C_formFM3mapLN15C_form__cstmt_t2LN15C_form__cstmt_tFPN15C_form__cstmt_t1N15C_form__cstmt_t(cm_body_0,
            &walk_cstmt__0, &v_64, 0), _fx_catch_22);
      _fx_make_R19C_form__cdefmacro_t(&v_68, &v_67->cm_cname, v_63, v_64, v_67->cm_scope, &v_67->cm_loc, &v_65);
      _fx_R19C_form__cdefmacro_t* v_69 = &cm_0->data;
      _fx_free_R19C_form__cdefmacro_t(v_69);
      _fx_copy_R19C_form__cdefmacro_t(&v_65, v_69);
      FX_COPY_PTR(s_0, fx_result);

   _fx_catch_22: ;
      _fx_free_R19C_form__cdefmacro_t(&v_65);
      if (v_64) {
         _fx_free_LN15C_form__cstmt_t(&v_64);
      }
      FX_FREE_LIST_SIMPLE(&v_63);
      FX_FREE_LIST_SIMPLE(&cm_args_0);
      if (cm_body_0) {
         _fx_free_LN15C_form__cstmt_t(&cm_body_0);
      }
   }
   else if (tag_0 == 24) {
      _fx_T2R9Ast__id_tR10Ast__loc_t* vcase_13 = &s_0->u.CMacroUndef;
      _fx_R9Ast__id_t v_70;
      FX_CALL(walk_id__0.fp(&vcase_13->t0, &v_70, walk_id__0.fcv), _fx_catch_23);
      FX_CALL(_fx_M6C_formFM11CMacroUndefN15C_form__cstmt_t2R9Ast__id_tR10Ast__loc_t(&v_70, &vcase_13->t1, fx_result),
         _fx_catch_23);

   _fx_catch_23: ;
   }
   else if (tag_0 == 25) {
      _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t v_71 = 0;
      _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t cs_l_0 = 0;
      _fx_LN15C_form__cstmt_t v_72 = 0;
      _fx_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t* vcase_14 = &s_0->u.CMacroIf;
      _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t lstend_4 = 0;
      FX_COPY_PTR(vcase_14->t0, &cs_l_0);
      _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t lst_4 = cs_l_0;
      for (; lst_4; lst_4 = lst_4->tl) {
         _fx_N14C_form__cexp_t c_0 = 0;
         _fx_LN15C_form__cstmt_t sl_1 = 0;
         _fx_N14C_form__cexp_t v_73 = 0;
         _fx_LN15C_form__cstmt_t v_74 = 0;
         _fx_T2N14C_form__cexp_tLN15C_form__cstmt_t tup_4 = {0};
         _fx_T2N14C_form__cexp_tLN15C_form__cstmt_t* __pat___4 = &lst_4->hd;
         FX_COPY_PTR(__pat___4->t0, &c_0);
         FX_COPY_PTR(__pat___4->t1, &sl_1);
         FX_CALL(_fx_M6C_formFM12walk_cexp_1_N14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(c_0, callb_0, &v_73, 0),
            _fx_catch_24);
         FX_CALL(walk_csl__0.fp(sl_1, callb_0, &v_74, walk_csl__0.fcv), _fx_catch_24);
         _fx_make_T2N14C_form__cexp_tLN15C_form__cstmt_t(v_73, v_74, &tup_4);
         _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t node_4 = 0;
         FX_CALL(_fx_cons_LT2N14C_form__cexp_tLN15C_form__cstmt_t(&tup_4, 0, false, &node_4), _fx_catch_24);
         FX_LIST_APPEND(v_71, lstend_4, node_4);

      _fx_catch_24: ;
         _fx_free_T2N14C_form__cexp_tLN15C_form__cstmt_t(&tup_4);
         if (v_74) {
            _fx_free_LN15C_form__cstmt_t(&v_74);
         }
         if (v_73) {
            _fx_free_N14C_form__cexp_t(&v_73);
         }
         if (sl_1) {
            _fx_free_LN15C_form__cstmt_t(&sl_1);
         }
         if (c_0) {
            _fx_free_N14C_form__cexp_t(&c_0);
         }
         FX_CHECK_EXN(_fx_catch_25);
      }
      FX_CALL(walk_csl__0.fp(vcase_14->t1, callb_0, &v_72, walk_csl__0.fcv), _fx_catch_25);
      FX_CALL(
         _fx_M6C_formFM8CMacroIfN15C_form__cstmt_t3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t(v_71,
            v_72, &vcase_14->t2, fx_result), _fx_catch_25);

   _fx_catch_25: ;
      if (v_72) {
         _fx_free_LN15C_form__cstmt_t(&v_72);
      }
      if (cs_l_0) {
         _fx_free_LT2N14C_form__cexp_tLN15C_form__cstmt_t(&cs_l_0);
      }
      if (v_71) {
         _fx_free_LT2N14C_form__cexp_tLN15C_form__cstmt_t(&v_71);
      }
   }
   else if (tag_0 == 26) {
      FX_COPY_PTR(s_0, fx_result);
   }
   else if (tag_0 == 27) {
      FX_COPY_PTR(s_0, fx_result);
   }
   else {
      FX_FAST_THROW(FX_EXN_NoMatchError, _fx_cleanup);
   }

_fx_cleanup: ;
   FX_FREE_FP(&walk_id__0);
   FX_FREE_FP(&walk_cstmt__0);
   FX_FREE_FP(&walk_csl__0);
   return fx_status;
}

static int _fx_M6C_formFM8walk_id_R9Ast__id_t1R9Ast__id_t(
   struct _fx_R9Ast__id_t* n_0,
   struct _fx_R9Ast__id_t* fx_result,
   void* fx_fv)
{
   _fx_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t v_0 = 0;
   int fx_status = 0;
   _fx_M6C_formFM8walk_id_R9Ast__id_t1R9Ast__id_t_cldata_t* cv_0 =
      (_fx_M6C_formFM8walk_id_R9Ast__id_t1R9Ast__id_t_cldata_t*)fx_fv;
   _fx_R17C_form__c_callb_t* callb_0 = &cv_0->t0;
   FX_COPY_PTR(callb_0->ccb_ident, &v_0);
   if ((v_0 != 0) + 1 == 2) {
      _fx_FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t* f_0 = &v_0->u.Some;
      FX_CALL(f_0->fp(n_0, callb_0, fx_result, f_0->fcv), _fx_catch_0);

   _fx_catch_0: ;
   }
   else {
      *fx_result = *n_0;
   }
   if (v_0) {
      _fx_free_Nt6option1FPR9Ast__id_t2R9Ast__id_tR17C_form__c_callb_t(&v_0);
   }
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM7make_fpFPR9Ast__id_t1R9Ast__id_t1RM9c_callb_t(
   struct _fx_R17C_form__c_callb_t* arg0,
   struct _fx_FPR9Ast__id_t1R9Ast__id_t* fx_result)
{
   FX_MAKE_FP_IMPL_START(_fx_M6C_formFM8walk_id_R9Ast__id_t1R9Ast__id_t_cldata_t,
      _fx_free_M6C_formFM8walk_id_R9Ast__id_t1R9Ast__id_t, _fx_M6C_formFM8walk_id_R9Ast__id_t1R9Ast__id_t);
   _fx_copy_R17C_form__c_callb_t(arg0, &fcv->t0);
   return 0;
}

static int _fx_M6C_formFM12walk_ctyp_1_N14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_N14C_form__ctyp_t_data_t** fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(_fx_M6C_formFM17check_n_walk_ctypN14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(t_0, callb_0, fx_result, 0),
      _fx_cleanup);

_fx_cleanup: ;
   return fx_status;
}

static int _fx_M6C_formFM14walk_ctyp_opt_Nt6option1N14C_form__ctyp_t2Nt6option1N14C_form__ctyp_tRM9c_callb_t(
   struct _fx_Nt6option1N14C_form__ctyp_t* t_opt_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_Nt6option1N14C_form__ctyp_t* fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   if (t_opt_0->tag == 2) {
      _fx_N14C_form__ctyp_t v_0 = 0;
      FX_CALL(
         _fx_M6C_formFM17check_n_walk_ctypN14C_form__ctyp_t2N14C_form__ctyp_tRM9c_callb_t(t_opt_0->u.Some, callb_0, &v_0, 0),
         _fx_catch_0);
      _fx_M6C_formFM4SomeNt6option1N14C_form__ctyp_t1N14C_form__ctyp_t(v_0, fx_result);

   _fx_catch_0: ;
      if (v_0) {
         _fx_free_N14C_form__ctyp_t(&v_0);
      }
   }
   else {
      _fx_copy_Nt6option1N14C_form__ctyp_t(t_opt_0, fx_result);
   }
   return fx_status;
}

static int _fx_M6C_formFM12walk_cexp_1_N14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_N14C_form__cexp_t_data_t** fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(_fx_M6C_formFM17check_n_walk_cexpN14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(e_0, callb_0, fx_result, 0),
      _fx_cleanup);

_fx_cleanup: ;
   return fx_status;
}

static int _fx_M6C_formFM9walk_cel_LN14C_form__cexp_t2LN14C_form__cexp_tRM9c_callb_t(
   struct _fx_LN14C_form__cexp_t_data_t* el_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_LN14C_form__cexp_t_data_t** fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   _fx_LN14C_form__cexp_t lstend_0 = 0;
   _fx_LN14C_form__cexp_t lst_0 = el_0;
   for (; lst_0; lst_0 = lst_0->tl) {
      _fx_N14C_form__cexp_t res_0 = 0;
      _fx_N14C_form__cexp_t x_0 = lst_0->hd;
      FX_CALL(_fx_M6C_formFM17check_n_walk_cexpN14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(x_0, callb_0, &res_0, 0),
         _fx_catch_0);
      _fx_LN14C_form__cexp_t node_0 = 0;
      FX_CALL(_fx_cons_LN14C_form__cexp_t(res_0, 0, false, &node_0), _fx_catch_0);
      FX_LIST_APPEND(*fx_result, lstend_0, node_0);

   _fx_catch_0: ;
      if (res_0) {
         _fx_free_N14C_form__cexp_t(&res_0);
      }
      FX_CHECK_EXN(_fx_cleanup);
   }

_fx_cleanup: ;
   return fx_status;
}

static int _fx_M6C_formFM11walk_cstmt_N15C_form__cstmt_t1N15C_form__cstmt_t(
   struct _fx_N15C_form__cstmt_t_data_t* s_0,
   struct _fx_N15C_form__cstmt_t_data_t** fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   _fx_M6C_formFM11walk_cstmt_N15C_form__cstmt_t1N15C_form__cstmt_t_cldata_t* cv_0 =
      (_fx_M6C_formFM11walk_cstmt_N15C_form__cstmt_t1N15C_form__cstmt_t_cldata_t*)fx_fv;
   FX_CALL(_fx_M6C_formFM18check_n_walk_cstmtN15C_form__cstmt_t2N15C_form__cstmt_tRM9c_callb_t(s_0, &cv_0->t0, fx_result, 0),
      _fx_cleanup);

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM7make_fpFPN15C_form__cstmt_t1N15C_form__cstmt_t1RM9c_callb_t(
   struct _fx_R17C_form__c_callb_t* arg0,
   struct _fx_FPN15C_form__cstmt_t1N15C_form__cstmt_t* fx_result)
{
   FX_MAKE_FP_IMPL_START(_fx_M6C_formFM11walk_cstmt_N15C_form__cstmt_t1N15C_form__cstmt_t_cldata_t,
      _fx_free_M6C_formFM11walk_cstmt_N15C_form__cstmt_t1N15C_form__cstmt_t,
      _fx_M6C_formFM11walk_cstmt_N15C_form__cstmt_t1N15C_form__cstmt_t);
   _fx_copy_R17C_form__c_callb_t(arg0, &fcv->t0);
   return 0;
}

static int _fx_M6C_formFM9walk_csl_LN15C_form__cstmt_t2LN15C_form__cstmt_tRM9c_callb_t(
   struct _fx_LN15C_form__cstmt_t_data_t* sl_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_LN15C_form__cstmt_t_data_t** fx_result,
   void* fx_fv)
{
   _fx_FPN15C_form__cstmt_t1N15C_form__cstmt_t walk_cstmt__0 = {0};
   int fx_status = 0;
   _fx_M6C_formFM9walk_csl_LN15C_form__cstmt_t2LN15C_form__cstmt_tRM9c_callb_t_cldata_t* cv_0 =
      (_fx_M6C_formFM9walk_csl_LN15C_form__cstmt_t2LN15C_form__cstmt_tRM9c_callb_t_cldata_t*)fx_fv;
   _fx_M6C_formFM7make_fpFPN15C_form__cstmt_t1N15C_form__cstmt_t1RM9c_callb_t(&cv_0->t0, &walk_cstmt__0);
   _fx_LN15C_form__cstmt_t lstend_0 = 0;
   _fx_LN15C_form__cstmt_t lst_0 = sl_0;
   for (; lst_0; lst_0 = lst_0->tl) {
      _fx_N15C_form__cstmt_t res_0 = 0;
      _fx_N15C_form__cstmt_t x_0 = lst_0->hd;
      FX_CALL(walk_cstmt__0.fp(x_0, &res_0, walk_cstmt__0.fcv), _fx_catch_0);
      _fx_LN15C_form__cstmt_t node_0 = 0;
      FX_CALL(_fx_cons_LN15C_form__cstmt_t(res_0, 0, false, &node_0), _fx_catch_0);
      FX_LIST_APPEND(*fx_result, lstend_0, node_0);

   _fx_catch_0: ;
      if (res_0) {
         _fx_free_N15C_form__cstmt_t(&res_0);
      }
      FX_CHECK_EXN(_fx_cleanup);
   }

_fx_cleanup: ;
   FX_FREE_FP(&walk_cstmt__0);
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM7make_fpFPLN15C_form__cstmt_t2LN15C_form__cstmt_tRM9c_callb_t1RM9c_callb_t(
   struct _fx_R17C_form__c_callb_t* arg0,
   struct _fx_FPLN15C_form__cstmt_t2LN15C_form__cstmt_tR17C_form__c_callb_t* fx_result)
{
   FX_MAKE_FP_IMPL_START(_fx_M6C_formFM9walk_csl_LN15C_form__cstmt_t2LN15C_form__cstmt_tRM9c_callb_t_cldata_t,
      _fx_free_M6C_formFM9walk_csl_LN15C_form__cstmt_t2LN15C_form__cstmt_tRM9c_callb_t,
      _fx_M6C_formFM9walk_csl_LN15C_form__cstmt_t2LN15C_form__cstmt_tRM9c_callb_t);
   _fx_copy_R17C_form__c_callb_t(arg0, &fcv->t0);
   return 0;
}

static int _fx_M6C_formFM14walk_cexp_opt_Nt6option1N14C_form__cexp_t2Nt6option1N14C_form__cexp_tRM9c_callb_t(
   struct _fx_Nt6option1N14C_form__cexp_t* e_opt_0,
   struct _fx_R17C_form__c_callb_t* callb_0,
   struct _fx_Nt6option1N14C_form__cexp_t* fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   if (e_opt_0->tag == 2) {
      _fx_N14C_form__cexp_t v_0 = 0;
      FX_CALL(
         _fx_M6C_formFM17check_n_walk_cexpN14C_form__cexp_t2N14C_form__cexp_tRM9c_callb_t(e_opt_0->u.Some, callb_0, &v_0, 0),
         _fx_catch_0);
      _fx_M6C_formFM4SomeNt6option1N14C_form__cexp_t1N14C_form__cexp_t(v_0, fx_result);

   _fx_catch_0: ;
      if (v_0) {
         _fx_free_N14C_form__cexp_t(&v_0);
      }
   }
   else {
      _fx_copy_Nt6option1N14C_form__cexp_t(e_opt_0, fx_result);
   }
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM17check_n_fold_ctypv2N14C_form__ctyp_tRM14c_fold_callb_t(
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_R22C_form__c_fold_callb_t* callb_0,
   void* fx_fv)
{
   _fx_Nt6option1FPv2N14C_form__ctyp_tR22C_form__c_fold_callb_t v_0 = 0;
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   FX_COPY_PTR(callb_0->ccb_fold_typ, &v_0);
   if ((v_0 != 0) + 1 == 2) {
      _fx_FPv2N14C_form__ctyp_tR22C_form__c_fold_callb_t* f_0 = &v_0->u.Some;
      FX_CALL(f_0->fp(t_0, callb_0, f_0->fcv), _fx_catch_0);

   _fx_catch_0: ;
   }
   else {
      FX_CALL(_fx_M6C_formFM9fold_ctypv2N14C_form__ctyp_tRM14c_fold_callb_t(t_0, callb_0, 0), _fx_catch_1);  _fx_catch_1: ;
   }

_fx_cleanup: ;
   if (v_0) {
      _fx_free_Nt6option1FPv2N14C_form__ctyp_tR22C_form__c_fold_callb_t(&v_0);
   }
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM17check_n_fold_cexpv2N14C_form__cexp_tRM14c_fold_callb_t(
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   struct _fx_R22C_form__c_fold_callb_t* callb_0,
   void* fx_fv)
{
   _fx_Nt6option1FPv2N14C_form__cexp_tR22C_form__c_fold_callb_t v_0 = 0;
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   FX_COPY_PTR(callb_0->ccb_fold_exp, &v_0);
   if ((v_0 != 0) + 1 == 2) {
      _fx_FPv2N14C_form__cexp_tR22C_form__c_fold_callb_t* f_0 = &v_0->u.Some;
      FX_CALL(f_0->fp(e_0, callb_0, f_0->fcv), _fx_catch_0);

   _fx_catch_0: ;
   }
   else {
      FX_CALL(_fx_M6C_formFM9fold_cexpv2N14C_form__cexp_tRM14c_fold_callb_t(e_0, callb_0, 0), _fx_catch_1);  _fx_catch_1: ;
   }

_fx_cleanup: ;
   if (v_0) {
      _fx_free_Nt6option1FPv2N14C_form__cexp_tR22C_form__c_fold_callb_t(&v_0);
   }
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM18check_n_fold_cstmtv2N15C_form__cstmt_tRM14c_fold_callb_t(
   struct _fx_N15C_form__cstmt_t_data_t* s_0,
   struct _fx_R22C_form__c_fold_callb_t* callb_0,
   void* fx_fv)
{
   _fx_Nt6option1FPv2N15C_form__cstmt_tR22C_form__c_fold_callb_t v_0 = 0;
   int fx_status = 0;
   FX_COPY_PTR(callb_0->ccb_fold_stmt, &v_0);
   if ((v_0 != 0) + 1 == 2) {
      _fx_FPv2N15C_form__cstmt_tR22C_form__c_fold_callb_t* f_0 = &v_0->u.Some;
      FX_CALL(f_0->fp(s_0, callb_0, f_0->fcv), _fx_catch_0);

   _fx_catch_0: ;
   }
   else {
      FX_CALL(_fx_M6C_formFM10fold_cstmtv2N15C_form__cstmt_tRM14c_fold_callb_t(s_0, callb_0, 0), _fx_catch_1);  _fx_catch_1: ;
   }
   if (v_0) {
      _fx_free_Nt6option1FPv2N15C_form__cstmt_tR22C_form__c_fold_callb_t(&v_0);
   }
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM9fold_ctypv2N14C_form__ctyp_tRM14c_fold_callb_t(
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_R22C_form__c_fold_callb_t* callb_0,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   int tag_0 = FX_REC_VARIANT_TAG(t_0);
   bool res_0;
   if (tag_0 == 1) {
      res_0 = true;
   }
   else if (tag_0 == 6) {
      res_0 = true;
   }
   else if (tag_0 == 2) {
      res_0 = true;
   }
   else if (tag_0 == 4) {
      res_0 = true;
   }
   else if (tag_0 == 5) {
      res_0 = true;
   }
   else if (tag_0 == 7) {
      res_0 = true;
   }
   else if (tag_0 == 3) {
      res_0 = true;
   }
   else if (tag_0 == 8) {
      res_0 = true;
   }
   else if (tag_0 == 9) {
      res_0 = true;
   }
   else if (tag_0 == 13) {
      res_0 = true;
   }
   else if (tag_0 == 23) {
      res_0 = true;
   }
   else if (tag_0 == 10) {
      res_0 = true;
   }
   else if (tag_0 == 12) {
      res_0 = true;
   }
   else if (tag_0 == 11) {
      res_0 = true;
   }
   else {
      res_0 = false;
   }
   FX_CHECK_EXN(_fx_cleanup);
   if (res_0) {
      goto _fx_endmatch_0;
   }
   if (tag_0 == 14) {
      _fx_LT2R9Ast__id_tN14C_form__ctyp_t selems_0 = 0;
      _fx_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t* vcase_0 = &t_0->u.CTypStruct;
      _fx_Nt6option1R9Ast__id_t* n_opt_0 = &vcase_0->t0;
      if (n_opt_0->tag == 2) {
         _fx_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t v_0 = 0;
         FX_COPY_PTR(callb_0->ccb_fold_ident, &v_0);
         if ((v_0 != 0) + 1 == 2) {
            _fx_FPv2R9Ast__id_tR22C_form__c_fold_callb_t* f_0 = &v_0->u.Some;
            FX_CALL(f_0->fp(&n_opt_0->u.Some, callb_0, f_0->fcv), _fx_catch_0);

         _fx_catch_0: ;
         }
         FX_CHECK_EXN(_fx_catch_1);

      _fx_catch_1: ;
         if (v_0) {
            _fx_free_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t(&v_0);
         }
      }
      FX_CHECK_EXN(_fx_catch_4);
      FX_COPY_PTR(vcase_0->t1, &selems_0);
      _fx_LT2R9Ast__id_tN14C_form__ctyp_t lst_0 = selems_0;
      for (; lst_0; lst_0 = lst_0->tl) {
         _fx_N14C_form__ctyp_t t_1 = 0;
         _fx_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t v_1 = 0;
         _fx_T2R9Ast__id_tN14C_form__ctyp_t* __pat___0 = &lst_0->hd;
         _fx_R9Ast__id_t n_0 = __pat___0->t0;
         FX_COPY_PTR(__pat___0->t1, &t_1);
         FX_COPY_PTR(callb_0->ccb_fold_ident, &v_1);
         if ((v_1 != 0) + 1 == 2) {
            _fx_FPv2R9Ast__id_tR22C_form__c_fold_callb_t* f_1 = &v_1->u.Some;
            FX_CALL(f_1->fp(&n_0, callb_0, f_1->fcv), _fx_catch_2);

         _fx_catch_2: ;
         }
         FX_CHECK_EXN(_fx_catch_3);
         FX_CALL(_fx_M6C_formFM10fold_ctyp_v2N14C_form__ctyp_tRM14c_fold_callb_t(t_1, callb_0, 0), _fx_catch_3);

      _fx_catch_3: ;
         if (v_1) {
            _fx_free_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t(&v_1);
         }
         if (t_1) {
            _fx_free_N14C_form__ctyp_t(&t_1);
         }
         FX_CHECK_EXN(_fx_catch_4);
      }

   _fx_catch_4: ;
      if (selems_0) {
         _fx_free_LT2R9Ast__id_tN14C_form__ctyp_t(&selems_0);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 15) {
      _fx_LT2R9Ast__id_tN14C_form__ctyp_t uelems_0 = 0;
      _fx_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t* vcase_1 = &t_0->u.CTypUnion;
      _fx_Nt6option1R9Ast__id_t* n_opt_1 = &vcase_1->t0;
      if (n_opt_1->tag == 2) {
         _fx_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t v_2 = 0;
         FX_COPY_PTR(callb_0->ccb_fold_ident, &v_2);
         if ((v_2 != 0) + 1 == 2) {
            _fx_FPv2R9Ast__id_tR22C_form__c_fold_callb_t* f_2 = &v_2->u.Some;
            FX_CALL(f_2->fp(&n_opt_1->u.Some, callb_0, f_2->fcv), _fx_catch_5);

         _fx_catch_5: ;
         }
         FX_CHECK_EXN(_fx_catch_6);

      _fx_catch_6: ;
         if (v_2) {
            _fx_free_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t(&v_2);
         }
      }
      FX_CHECK_EXN(_fx_catch_9);
      FX_COPY_PTR(vcase_1->t1, &uelems_0);
      _fx_LT2R9Ast__id_tN14C_form__ctyp_t lst_1 = uelems_0;
      for (; lst_1; lst_1 = lst_1->tl) {
         _fx_N14C_form__ctyp_t t_2 = 0;
         _fx_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t v_3 = 0;
         _fx_T2R9Ast__id_tN14C_form__ctyp_t* __pat___1 = &lst_1->hd;
         _fx_R9Ast__id_t n_1 = __pat___1->t0;
         FX_COPY_PTR(__pat___1->t1, &t_2);
         FX_COPY_PTR(callb_0->ccb_fold_ident, &v_3);
         if ((v_3 != 0) + 1 == 2) {
            _fx_FPv2R9Ast__id_tR22C_form__c_fold_callb_t* f_3 = &v_3->u.Some;
            FX_CALL(f_3->fp(&n_1, callb_0, f_3->fcv), _fx_catch_7);

         _fx_catch_7: ;
         }
         FX_CHECK_EXN(_fx_catch_8);
         FX_CALL(_fx_M6C_formFM10fold_ctyp_v2N14C_form__ctyp_tRM14c_fold_callb_t(t_2, callb_0, 0), _fx_catch_8);

      _fx_catch_8: ;
         if (v_3) {
            _fx_free_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t(&v_3);
         }
         if (t_2) {
            _fx_free_N14C_form__ctyp_t(&t_2);
         }
         FX_CHECK_EXN(_fx_catch_9);
      }

   _fx_catch_9: ;
      if (uelems_0) {
         _fx_free_LT2R9Ast__id_tN14C_form__ctyp_t(&uelems_0);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 16) {
      _fx_LN14C_form__ctyp_t args_0 = 0;
      _fx_T2LN14C_form__ctyp_tN14C_form__ctyp_t* vcase_2 = &t_0->u.CTypFunRawPtr;
      FX_COPY_PTR(vcase_2->t0, &args_0);
      _fx_LN14C_form__ctyp_t lst_2 = args_0;
      for (; lst_2; lst_2 = lst_2->tl) {
         _fx_N14C_form__ctyp_t x_0 = lst_2->hd;
         FX_CALL(_fx_M6C_formFM10fold_ctyp_v2N14C_form__ctyp_tRM14c_fold_callb_t(x_0, callb_0, 0), _fx_catch_10);

      _fx_catch_10: ;
         FX_CHECK_EXN(_fx_catch_11);
      }
      FX_CALL(_fx_M6C_formFM10fold_ctyp_v2N14C_form__ctyp_tRM14c_fold_callb_t(vcase_2->t1, callb_0, 0), _fx_catch_11);

   _fx_catch_11: ;
      if (args_0) {
         _fx_free_LN14C_form__ctyp_t(&args_0);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 17) {
      FX_CALL(_fx_M6C_formFM10fold_ctyp_v2N14C_form__ctyp_tRM14c_fold_callb_t(t_0->u.CTypRawPtr.t1, callb_0, 0), _fx_catch_12);

   _fx_catch_12: ;
      goto _fx_endmatch_0;
   }
   if (tag_0 == 18) {
      FX_CALL(_fx_M6C_formFM10fold_ctyp_v2N14C_form__ctyp_tRM14c_fold_callb_t(t_0->u.CTypRawArray.t1, callb_0, 0),
         _fx_catch_13);

   _fx_catch_13: ;
      goto _fx_endmatch_0;
   }
   if (tag_0 == 19) {
      FX_CALL(_fx_M6C_formFM10fold_ctyp_v2N14C_form__ctyp_tRM14c_fold_callb_t(t_0->u.CTypArray.t1, callb_0, 0), _fx_catch_14);

   _fx_catch_14: ;
      goto _fx_endmatch_0;
   }
   if (tag_0 == 20) {
      FX_CALL(_fx_M6C_formFM10fold_ctyp_v2N14C_form__ctyp_tRM14c_fold_callb_t(t_0->u.CTypVector, callb_0, 0), _fx_catch_15);

   _fx_catch_15: ;
      goto _fx_endmatch_0;
   }
   if (tag_0 == 21) {
      _fx_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t v_4 = 0;
      FX_COPY_PTR(callb_0->ccb_fold_ident, &v_4);
      if ((v_4 != 0) + 1 == 2) {
         _fx_FPv2R9Ast__id_tR22C_form__c_fold_callb_t* f_4 = &v_4->u.Some;
         FX_CALL(f_4->fp(&t_0->u.CTypName, callb_0, f_4->fcv), _fx_catch_16);

      _fx_catch_16: ;
      }
      FX_CHECK_EXN(_fx_catch_17);

   _fx_catch_17: ;
      if (v_4) {
         _fx_free_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t(&v_4);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 22) {
      goto _fx_endmatch_0;
   }
   FX_FAST_THROW(FX_EXN_NoMatchError, _fx_cleanup);

_fx_endmatch_0: ;

_fx_cleanup: ;
   return fx_status;
}

static int _fx_M6C_formFM10fold_ctyp_v2N14C_form__ctyp_tRM14c_fold_callb_t(
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_R22C_form__c_fold_callb_t* callb_0,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   FX_CALL(_fx_M6C_formFM17check_n_fold_ctypv2N14C_form__ctyp_tRM14c_fold_callb_t(t_0, callb_0, 0), _fx_cleanup);

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM9fold_cexpv2N14C_form__cexp_tRM14c_fold_callb_t(
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   struct _fx_R22C_form__c_fold_callb_t* callb_0,
   void* fx_fv)
{
   _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_0 = {0};
   _fx_N14C_form__ctyp_t t_0 = 0;
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   int tag_0 = FX_REC_VARIANT_TAG(e_0);
   if (tag_0 == 1) {
      _fx_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t v_1 = 0;
      _fx_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_0 = &e_0->u.CExpIdent;
      FX_COPY_PTR(callb_0->ccb_fold_ident, &v_1);
      if ((v_1 != 0) + 1 == 2) {
         _fx_FPv2R9Ast__id_tR22C_form__c_fold_callb_t* f_0 = &v_1->u.Some;
         FX_CALL(f_0->fp(&vcase_0->t0, callb_0, f_0->fcv), _fx_catch_0);

      _fx_catch_0: ;
      }
      FX_CHECK_EXN(_fx_catch_1);
      _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&vcase_0->t1, &v_0);

   _fx_catch_1: ;
      if (v_1) {
         _fx_free_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t(&v_1);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 2) {
      _fx_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_1 = &e_0->u.CExpLit;
      _fx_N14K_form__klit_t* v_2 = &vcase_1->t0;
      if (v_2->tag == 8) {
         _fx_N14K_form__ktyp_t v_3 = v_2->u.KLitNil;
         if (FX_REC_VARIANT_TAG(v_3) == 16) {
            _fx_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t v_4 = 0;
            FX_COPY_PTR(callb_0->ccb_fold_ident, &v_4);
            if ((v_4 != 0) + 1 == 2) {
               _fx_FPv2R9Ast__id_tR22C_form__c_fold_callb_t* f_1 = &v_4->u.Some;
               FX_CALL(f_1->fp(&v_3->u.KTypName, callb_0, f_1->fcv), _fx_catch_2);

            _fx_catch_2: ;
            }
            FX_CHECK_EXN(_fx_catch_3);
            _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&vcase_1->t1, &v_0);

         _fx_catch_3: ;
            if (v_4) {
               _fx_free_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t(&v_4);
            }
            goto _fx_endmatch_0;
         }
      }
   }
   if (tag_0 == 2) {
      _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&e_0->u.CExpLit.t1, &v_0); goto _fx_endmatch_0;
   }
   if (tag_0 == 3) {
      _fx_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_2 =
         &e_0->u.CExpBinary;
      FX_CALL(_fx_M6C_formFM10fold_cexp_v2N14C_form__cexp_tRM14c_fold_callb_t(vcase_2->t1, callb_0, 0), _fx_catch_4);
      FX_CALL(_fx_M6C_formFM10fold_cexp_v2N14C_form__cexp_tRM14c_fold_callb_t(vcase_2->t2, callb_0, 0), _fx_catch_4);
      _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&vcase_2->t3, &v_0);

   _fx_catch_4: ;
      goto _fx_endmatch_0;
   }
   if (tag_0 == 4) {
      _fx_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_3 = &e_0->u.CExpUnary;
      FX_CALL(_fx_M6C_formFM10fold_cexp_v2N14C_form__cexp_tRM14c_fold_callb_t(vcase_3->t1, callb_0, 0), _fx_catch_5);
      _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&vcase_3->t2, &v_0);

   _fx_catch_5: ;
      goto _fx_endmatch_0;
   }
   if (tag_0 == 5) {
      _fx_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_4 = &e_0->u.CExpMem;
      FX_CALL(_fx_M6C_formFM10fold_cexp_v2N14C_form__cexp_tRM14c_fold_callb_t(vcase_4->t0, callb_0, 0), _fx_catch_6);
      _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&vcase_4->t2, &v_0);

   _fx_catch_6: ;
      goto _fx_endmatch_0;
   }
   if (tag_0 == 6) {
      _fx_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_5 = &e_0->u.CExpArrow;
      FX_CALL(_fx_M6C_formFM10fold_cexp_v2N14C_form__cexp_tRM14c_fold_callb_t(vcase_5->t0, callb_0, 0), _fx_catch_7);
      _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&vcase_5->t2, &v_0);

   _fx_catch_7: ;
      goto _fx_endmatch_0;
   }
   if (tag_0 == 7) {
      _fx_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t* vcase_6 = &e_0->u.CExpCast;
      FX_CALL(_fx_M6C_formFM10fold_cexp_v2N14C_form__cexp_tRM14c_fold_callb_t(vcase_6->t0, callb_0, 0), _fx_catch_8);
      _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(vcase_6->t1, &vcase_6->t2, &v_0);

   _fx_catch_8: ;
      goto _fx_endmatch_0;
   }
   if (tag_0 == 8) {
      _fx_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_7 = &e_0->u.CExpTernary;
      FX_CALL(_fx_M6C_formFM10fold_cexp_v2N14C_form__cexp_tRM14c_fold_callb_t(vcase_7->t0, callb_0, 0), _fx_catch_9);
      FX_CALL(_fx_M6C_formFM10fold_cexp_v2N14C_form__cexp_tRM14c_fold_callb_t(vcase_7->t1, callb_0, 0), _fx_catch_9);
      FX_CALL(_fx_M6C_formFM10fold_cexp_v2N14C_form__cexp_tRM14c_fold_callb_t(vcase_7->t2, callb_0, 0), _fx_catch_9);
      _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&vcase_7->t3, &v_0);

   _fx_catch_9: ;
      goto _fx_endmatch_0;
   }
   if (tag_0 == 9) {
      _fx_LN14C_form__cexp_t args_0 = 0;
      _fx_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_8 = &e_0->u.CExpCall;
      FX_CALL(_fx_M6C_formFM10fold_cexp_v2N14C_form__cexp_tRM14c_fold_callb_t(vcase_8->t0, callb_0, 0), _fx_catch_11);
      FX_COPY_PTR(vcase_8->t1, &args_0);
      _fx_LN14C_form__cexp_t lst_0 = args_0;
      for (; lst_0; lst_0 = lst_0->tl) {
         _fx_N14C_form__cexp_t x_0 = lst_0->hd;
         FX_CALL(_fx_M6C_formFM10fold_cexp_v2N14C_form__cexp_tRM14c_fold_callb_t(x_0, callb_0, 0), _fx_catch_10);

      _fx_catch_10: ;
         FX_CHECK_EXN(_fx_catch_11);
      }
      _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&vcase_8->t2, &v_0);

   _fx_catch_11: ;
      if (args_0) {
         _fx_free_LN14C_form__cexp_t(&args_0);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 10) {
      _fx_LN14C_form__cexp_t eseq_0 = 0;
      _fx_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_9 = &e_0->u.CExpInit;
      FX_COPY_PTR(vcase_9->t0, &eseq_0);
      _fx_LN14C_form__cexp_t lst_1 = eseq_0;
      for (; lst_1; lst_1 = lst_1->tl) {
         _fx_N14C_form__cexp_t x_1 = lst_1->hd;
         FX_CALL(_fx_M6C_formFM10fold_cexp_v2N14C_form__cexp_tRM14c_fold_callb_t(x_1, callb_0, 0), _fx_catch_12);

      _fx_catch_12: ;
         FX_CHECK_EXN(_fx_catch_13);
      }
      _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&vcase_9->t1, &v_0);

   _fx_catch_13: ;
      if (eseq_0) {
         _fx_free_LN14C_form__cexp_t(&eseq_0);
      }
      goto _fx_endmatch_0;
   }
   if (tag_0 == 11) {
      _fx_T2N14C_form__ctyp_tR10Ast__loc_t* vcase_10 = &e_0->u.CExpTyp;
      _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(vcase_10->t0, &vcase_10->t1, &v_0);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 12) {
      _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(_fx_g15C_form__CTypAny, &e_0->u.CExpCCode.t1, &v_0); goto _fx_endmatch_0;
   }
   FX_FAST_THROW(FX_EXN_NoMatchError, _fx_cleanup);

_fx_endmatch_0: ;
   FX_CHECK_EXN(_fx_cleanup);
   FX_COPY_PTR(v_0.t0, &t_0);
   FX_CALL(_fx_M6C_formFM17check_n_fold_ctypv2N14C_form__ctyp_tRM14c_fold_callb_t(t_0, callb_0, 0), _fx_cleanup);

_fx_cleanup: ;
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_0);
   if (t_0) {
      _fx_free_N14C_form__ctyp_t(&t_0);
   }
   return fx_status;
}

static int _fx_M6C_formFM10fold_cexp_v2N14C_form__cexp_tRM14c_fold_callb_t(
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   struct _fx_R22C_form__c_fold_callb_t* callb_0,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   FX_CALL(_fx_M6C_formFM17check_n_fold_cexpv2N14C_form__cexp_tRM14c_fold_callb_t(e_0, callb_0, 0), _fx_cleanup);

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM10fold_cstmtv2N15C_form__cstmt_tRM14c_fold_callb_t(
   struct _fx_N15C_form__cstmt_t_data_t* s_0,
   struct _fx_R22C_form__c_fold_callb_t* callb_0,
   void* fx_fv)
{
   _fx_FPv1N15C_form__cstmt_t fold_cstmt__0 = {0};
   _fx_FPv2LN15C_form__cstmt_tR22C_form__c_fold_callb_t fold_csl__0 = {0};
   _fx_FPv1R9Ast__id_t fold_id__0 = {0};
   int fx_status = 0;
   _fx_M6C_formFM7make_fpFPv1N15C_form__cstmt_t1RM14c_fold_callb_t(callb_0, &fold_cstmt__0);
   _fx_M6C_formFM7make_fpFPv2LN15C_form__cstmt_tRM14c_fold_callb_t1RM14c_fold_callb_t(callb_0, &fold_csl__0);
   _fx_M6C_formFM7make_fpFPv1R9Ast__id_t1RM14c_fold_callb_t(callb_0, &fold_id__0);
   int tag_0 = FX_REC_VARIANT_TAG(s_0);
   if (tag_0 != 1) {
      if (tag_0 != 2) {
         if (tag_0 == 3) {
            FX_CALL(_fx_M6C_formFM17check_n_fold_cexpv2N14C_form__cexp_tRM14c_fold_callb_t(s_0->u.CExp, callb_0, 0),
               _fx_catch_0);

         _fx_catch_0: ;
         }
         else if (tag_0 != 4) {
            if (tag_0 != 5) {
               if (tag_0 == 6) {
                  _fx_Nt6option1N14C_form__cexp_t* e_opt_0 = &s_0->u.CStmtReturn.t0;
                  if (e_opt_0->tag == 2) {
                     FX_CALL(
                        _fx_M6C_formFM17check_n_fold_cexpv2N14C_form__cexp_tRM14c_fold_callb_t(e_opt_0->u.Some, callb_0, 0),
                        _fx_catch_1);

                  _fx_catch_1: ;
                  }
                  FX_CHECK_EXN(_fx_catch_2);

               _fx_catch_2: ;
               }
               else if (tag_0 == 7) {
                  _fx_LN15C_form__cstmt_t sl_0 = 0;
                  FX_COPY_PTR(s_0->u.CStmtBlock.t0, &sl_0);
                  _fx_LN15C_form__cstmt_t lst_0 = sl_0;
                  for (; lst_0; lst_0 = lst_0->tl) {
                     _fx_N15C_form__cstmt_t x_0 = lst_0->hd;
                     FX_CALL(fold_cstmt__0.fp(x_0, fold_cstmt__0.fcv), _fx_catch_3);

                  _fx_catch_3: ;
                     FX_CHECK_EXN(_fx_catch_4);
                  }

               _fx_catch_4: ;
                  if (sl_0) {
                     _fx_free_LN15C_form__cstmt_t(&sl_0);
                  }
               }
               else if (tag_0 == 8) {
                  FX_CALL(fold_cstmt__0.fp(s_0->u.CStmtSync.t1, fold_cstmt__0.fcv), _fx_catch_5);  _fx_catch_5: ;
               }
               else if (tag_0 == 9) {
                  _fx_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t* vcase_0 = &s_0->u.CStmtIf;
                  FX_CALL(_fx_M6C_formFM17check_n_fold_cexpv2N14C_form__cexp_tRM14c_fold_callb_t(vcase_0->t0, callb_0, 0),
                     _fx_catch_6);
                  FX_CALL(fold_cstmt__0.fp(vcase_0->t1, fold_cstmt__0.fcv), _fx_catch_6);
                  FX_CALL(fold_cstmt__0.fp(vcase_0->t2, fold_cstmt__0.fcv), _fx_catch_6);

               _fx_catch_6: ;
               }
               else if (tag_0 == 10) {
                  _fx_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t v_0 = 0;
                  FX_COPY_PTR(callb_0->ccb_fold_ident, &v_0);
                  if ((v_0 != 0) + 1 == 2) {
                     _fx_FPv2R9Ast__id_tR22C_form__c_fold_callb_t* f_0 = &v_0->u.Some;
                     FX_CALL(f_0->fp(&s_0->u.CStmtGoto.t0, callb_0, f_0->fcv), _fx_catch_7);

                  _fx_catch_7: ;
                  }
                  FX_CHECK_EXN(_fx_catch_8);

               _fx_catch_8: ;
                  if (v_0) {
                     _fx_free_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t(&v_0);
                  }
               }
               else if (tag_0 == 11) {
                  _fx_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t v_1 = 0;
                  FX_COPY_PTR(callb_0->ccb_fold_ident, &v_1);
                  if ((v_1 != 0) + 1 == 2) {
                     _fx_FPv2R9Ast__id_tR22C_form__c_fold_callb_t* f_1 = &v_1->u.Some;
                     FX_CALL(f_1->fp(&s_0->u.CStmtLabel.t0, callb_0, f_1->fcv), _fx_catch_9);

                  _fx_catch_9: ;
                  }
                  FX_CHECK_EXN(_fx_catch_10);

               _fx_catch_10: ;
                  if (v_1) {
                     _fx_free_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t(&v_1);
                  }
               }
               else if (tag_0 == 12) {
                  _fx_LN14C_form__cexp_t e1_0 = 0;
                  _fx_LN14C_form__cexp_t e3_0 = 0;
                  _fx_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t*
                     vcase_1 = &s_0->u.CStmtFor;
                  _fx_Nt6option1N14C_form__cexp_t* e2_opt_0 = &vcase_1->t2;
                  _fx_Nt6option1N14C_form__ctyp_t* t_opt_0 = &vcase_1->t0;
                  if (t_opt_0->tag == 2) {
                     FX_CALL(
                        _fx_M6C_formFM17check_n_fold_ctypv2N14C_form__ctyp_tRM14c_fold_callb_t(t_opt_0->u.Some, callb_0, 0),
                        _fx_catch_11);

                  _fx_catch_11: ;
                  }
                  FX_CHECK_EXN(_fx_catch_15);
                  FX_COPY_PTR(vcase_1->t1, &e1_0);
                  _fx_LN14C_form__cexp_t lst_1 = e1_0;
                  for (; lst_1; lst_1 = lst_1->tl) {
                     _fx_N14C_form__cexp_t x_1 = lst_1->hd;
                     FX_CALL(_fx_M6C_formFM17check_n_fold_cexpv2N14C_form__cexp_tRM14c_fold_callb_t(x_1, callb_0, 0),
                        _fx_catch_12);

                  _fx_catch_12: ;
                     FX_CHECK_EXN(_fx_catch_15);
                  }
                  if (e2_opt_0->tag == 2) {
                     FX_CALL(
                        _fx_M6C_formFM17check_n_fold_cexpv2N14C_form__cexp_tRM14c_fold_callb_t(e2_opt_0->u.Some, callb_0, 0),
                        _fx_catch_13);

                  _fx_catch_13: ;
                  }
                  FX_CHECK_EXN(_fx_catch_15);
                  FX_COPY_PTR(vcase_1->t3, &e3_0);
                  _fx_LN14C_form__cexp_t lst_2 = e3_0;
                  for (; lst_2; lst_2 = lst_2->tl) {
                     _fx_N14C_form__cexp_t x_2 = lst_2->hd;
                     FX_CALL(_fx_M6C_formFM17check_n_fold_cexpv2N14C_form__cexp_tRM14c_fold_callb_t(x_2, callb_0, 0),
                        _fx_catch_14);

                  _fx_catch_14: ;
                     FX_CHECK_EXN(_fx_catch_15);
                  }
                  FX_CALL(fold_cstmt__0.fp(vcase_1->t4, fold_cstmt__0.fcv), _fx_catch_15);

               _fx_catch_15: ;
                  if (e3_0) {
                     _fx_free_LN14C_form__cexp_t(&e3_0);
                  }
                  if (e1_0) {
                     _fx_free_LN14C_form__cexp_t(&e1_0);
                  }
               }
               else if (tag_0 == 13) {
                  _fx_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t* vcase_2 = &s_0->u.CStmtWhile;
                  FX_CALL(_fx_M6C_formFM17check_n_fold_cexpv2N14C_form__cexp_tRM14c_fold_callb_t(vcase_2->t0, callb_0, 0),
                     _fx_catch_16);
                  FX_CALL(fold_cstmt__0.fp(vcase_2->t1, fold_cstmt__0.fcv), _fx_catch_16);

               _fx_catch_16: ;
               }
               else if (tag_0 == 14) {
                  _fx_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t* vcase_3 = &s_0->u.CStmtDoWhile;
                  FX_CALL(fold_cstmt__0.fp(vcase_3->t0, fold_cstmt__0.fcv), _fx_catch_17);
                  FX_CALL(_fx_M6C_formFM17check_n_fold_cexpv2N14C_form__cexp_tRM14c_fold_callb_t(vcase_3->t1, callb_0, 0),
                     _fx_catch_17);

               _fx_catch_17: ;
               }
               else if (tag_0 == 15) {
                  _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t cases_0 = 0;
                  _fx_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t* vcase_4 = &s_0->u.CStmtSwitch;
                  FX_CALL(_fx_M6C_formFM17check_n_fold_cexpv2N14C_form__cexp_tRM14c_fold_callb_t(vcase_4->t0, callb_0, 0),
                     _fx_catch_20);
                  FX_COPY_PTR(vcase_4->t1, &cases_0);
                  _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t lst_3 = cases_0;
                  for (; lst_3; lst_3 = lst_3->tl) {
                     _fx_LN14C_form__cexp_t ll_0 = 0;
                     _fx_LN15C_form__cstmt_t sl_1 = 0;
                     _fx_T2LN14C_form__cexp_tLN15C_form__cstmt_t* __pat___0 = &lst_3->hd;
                     FX_COPY_PTR(__pat___0->t0, &ll_0);
                     FX_COPY_PTR(__pat___0->t1, &sl_1);
                     _fx_LN14C_form__cexp_t lst_4 = ll_0;
                     for (; lst_4; lst_4 = lst_4->tl) {
                        _fx_N14C_form__cexp_t x_3 = lst_4->hd;
                        FX_CALL(_fx_M6C_formFM17check_n_fold_cexpv2N14C_form__cexp_tRM14c_fold_callb_t(x_3, callb_0, 0),
                           _fx_catch_18);

                     _fx_catch_18: ;
                        FX_CHECK_EXN(_fx_catch_19);
                     }
                     FX_CALL(fold_csl__0.fp(sl_1, callb_0, fold_csl__0.fcv), _fx_catch_19);

                  _fx_catch_19: ;
                     if (sl_1) {
                        _fx_free_LN15C_form__cstmt_t(&sl_1);
                     }
                     if (ll_0) {
                        _fx_free_LN14C_form__cexp_t(&ll_0);
                     }
                     FX_CHECK_EXN(_fx_catch_20);
                  }

               _fx_catch_20: ;
                  if (cases_0) {
                     _fx_free_LT2LN14C_form__cexp_tLN15C_form__cstmt_t(&cases_0);
                  }
               }
               else if (tag_0 == 16) {
                  _fx_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t v_2 = 0;
                  _fx_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t* vcase_5 = &s_0->u.CDefVal;
                  _fx_Nt6option1N14C_form__cexp_t* e_opt_1 = &vcase_5->t2;
                  FX_CALL(_fx_M6C_formFM17check_n_fold_ctypv2N14C_form__ctyp_tRM14c_fold_callb_t(vcase_5->t0, callb_0, 0),
                     _fx_catch_23);
                  FX_COPY_PTR(callb_0->ccb_fold_ident, &v_2);
                  if ((v_2 != 0) + 1 == 2) {
                     _fx_FPv2R9Ast__id_tR22C_form__c_fold_callb_t* f_2 = &v_2->u.Some;
                     FX_CALL(f_2->fp(&vcase_5->t1, callb_0, f_2->fcv), _fx_catch_21);

                  _fx_catch_21: ;
                  }
                  FX_CHECK_EXN(_fx_catch_23);
                  if (e_opt_1->tag == 2) {
                     FX_CALL(
                        _fx_M6C_formFM17check_n_fold_cexpv2N14C_form__cexp_tRM14c_fold_callb_t(e_opt_1->u.Some, callb_0, 0),
                        _fx_catch_22);

                  _fx_catch_22: ;
                  }
                  FX_CHECK_EXN(_fx_catch_23);

               _fx_catch_23: ;
                  if (v_2) {
                     _fx_free_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t(&v_2);
                  }
               }
               else if (tag_0 == 17) {
                  _fx_LN15C_form__cstmt_t cf_body_0 = 0;
                  _fx_N14C_form__ctyp_t cf_rt_0 = 0;
                  _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t cf_args_0 = 0;
                  _fx_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t v_3 = 0;
                  _fx_R17C_form__cdeffun_t* v_4 = &s_0->u.CDefFun->data;
                  FX_COPY_PTR(v_4->cf_body, &cf_body_0);
                  FX_COPY_PTR(v_4->cf_rt, &cf_rt_0);
                  FX_COPY_PTR(v_4->cf_args, &cf_args_0);
                  _fx_R9Ast__id_t cf_name_0 = v_4->cf_name;
                  FX_COPY_PTR(callb_0->ccb_fold_ident, &v_3);
                  if ((v_3 != 0) + 1 == 2) {
                     _fx_FPv2R9Ast__id_tR22C_form__c_fold_callb_t* f_3 = &v_3->u.Some;
                     FX_CALL(f_3->fp(&cf_name_0, callb_0, f_3->fcv), _fx_catch_24);

                  _fx_catch_24: ;
                  }
                  FX_CHECK_EXN(_fx_catch_27);
                  _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t lst_5 = cf_args_0;
                  for (; lst_5; lst_5 = lst_5->tl) {
                     _fx_N14C_form__ctyp_t t_0 = 0;
                     _fx_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t v_5 = 0;
                     _fx_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t* __pat___1 = &lst_5->hd;
                     _fx_R9Ast__id_t a_0 = __pat___1->t0;
                     FX_COPY_PTR(__pat___1->t1, &t_0);
                     FX_COPY_PTR(callb_0->ccb_fold_ident, &v_5);
                     if ((v_5 != 0) + 1 == 2) {
                        _fx_FPv2R9Ast__id_tR22C_form__c_fold_callb_t* f_4 = &v_5->u.Some;
                        FX_CALL(f_4->fp(&a_0, callb_0, f_4->fcv), _fx_catch_25);

                     _fx_catch_25: ;
                     }
                     FX_CHECK_EXN(_fx_catch_26);
                     FX_CALL(_fx_M6C_formFM17check_n_fold_ctypv2N14C_form__ctyp_tRM14c_fold_callb_t(t_0, callb_0, 0),
                        _fx_catch_26);

                  _fx_catch_26: ;
                     if (v_5) {
                        _fx_free_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t(&v_5);
                     }
                     if (t_0) {
                        _fx_free_N14C_form__ctyp_t(&t_0);
                     }
                     FX_CHECK_EXN(_fx_catch_27);
                  }
                  FX_CALL(_fx_M6C_formFM17check_n_fold_ctypv2N14C_form__ctyp_tRM14c_fold_callb_t(cf_rt_0, callb_0, 0),
                     _fx_catch_27);
                  FX_CALL(fold_csl__0.fp(cf_body_0, callb_0, fold_csl__0.fcv), _fx_catch_27);

               _fx_catch_27: ;
                  if (v_3) {
                     _fx_free_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t(&v_3);
                  }
                  if (cf_args_0) {
                     _fx_free_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t(&cf_args_0);
                  }
                  if (cf_rt_0) {
                     _fx_free_N14C_form__ctyp_t(&cf_rt_0);
                  }
                  if (cf_body_0) {
                     _fx_free_LN15C_form__cstmt_t(&cf_body_0);
                  }
               }
               else if (tag_0 == 18) {
                  _fx_N14C_form__ctyp_t ct_typ_0 = 0;
                  _fx_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t v_6 = 0;
                  _fx_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t v_7 = 0;
                  _fx_R17C_form__cdeftyp_t* v_8 = &s_0->u.CDefTyp->data;
                  _fx_R9Ast__id_t ct_enum_0 = v_8->ct_enum;
                  FX_COPY_PTR(v_8->ct_typ, &ct_typ_0);
                  _fx_R9Ast__id_t ct_name_0 = v_8->ct_name;
                  FX_COPY_PTR(callb_0->ccb_fold_ident, &v_6);
                  if ((v_6 != 0) + 1 == 2) {
                     _fx_FPv2R9Ast__id_tR22C_form__c_fold_callb_t* f_5 = &v_6->u.Some;
                     FX_CALL(f_5->fp(&ct_name_0, callb_0, f_5->fcv), _fx_catch_28);

                  _fx_catch_28: ;
                  }
                  FX_CHECK_EXN(_fx_catch_30);
                  FX_CALL(_fx_M6C_formFM17check_n_fold_ctypv2N14C_form__ctyp_tRM14c_fold_callb_t(ct_typ_0, callb_0, 0),
                     _fx_catch_30);
                  FX_COPY_PTR(callb_0->ccb_fold_ident, &v_7);
                  if ((v_7 != 0) + 1 == 2) {
                     _fx_FPv2R9Ast__id_tR22C_form__c_fold_callb_t* f_6 = &v_7->u.Some;
                     FX_CALL(f_6->fp(&ct_enum_0, callb_0, f_6->fcv), _fx_catch_29);

                  _fx_catch_29: ;
                  }
                  FX_CHECK_EXN(_fx_catch_30);

               _fx_catch_30: ;
                  if (v_7) {
                     _fx_free_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t(&v_7);
                  }
                  if (v_6) {
                     _fx_free_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t(&v_6);
                  }
                  if (ct_typ_0) {
                     _fx_free_N14C_form__ctyp_t(&ct_typ_0);
                  }
               }
               else if (tag_0 == 19) {
                  FX_CALL(fold_id__0.fp(&s_0->u.CDefForwardSym.t0, fold_id__0.fcv), _fx_catch_31);  _fx_catch_31: ;
               }
               else if (tag_0 == 20) {
                  FX_CALL(fold_id__0.fp(&s_0->u.CDefForwardTyp.t0, fold_id__0.fcv), _fx_catch_32);  _fx_catch_32: ;
               }
               else if (tag_0 == 21) {
                  _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t cenum_members_0 = 0;
                  _fx_R18C_form__cdefenum_t* v_9 = &s_0->u.CDefEnum->data;
                  FX_COPY_PTR(v_9->cenum_members, &cenum_members_0);
                  _fx_R9Ast__id_t cenum_name_0 = v_9->cenum_name;
                  FX_CALL(fold_id__0.fp(&cenum_name_0, fold_id__0.fcv), _fx_catch_34);
                  _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t lst_6 = cenum_members_0;
                  for (; lst_6; lst_6 = lst_6->tl) {
                     _fx_Nt6option1N14C_form__cexp_t e_opt_2 = {0};
                     _fx_T2R9Ast__id_tNt6option1N14C_form__cexp_t* __pat___2 = &lst_6->hd;
                     _fx_R9Ast__id_t n_0 = __pat___2->t0;
                     _fx_copy_Nt6option1N14C_form__cexp_t(&__pat___2->t1, &e_opt_2);
                     FX_CALL(fold_id__0.fp(&n_0, fold_id__0.fcv), _fx_catch_33);
                     FX_CALL(
                        _fx_M6C_formFM14fold_cexp_opt_v2Nt6option1N14C_form__cexp_tRM14c_fold_callb_t(&e_opt_2, callb_0, 0),
                        _fx_catch_33);

                  _fx_catch_33: ;
                     _fx_free_Nt6option1N14C_form__cexp_t(&e_opt_2);
                     FX_CHECK_EXN(_fx_catch_34);
                  }

               _fx_catch_34: ;
                  if (cenum_members_0) {
                     _fx_free_LT2R9Ast__id_tNt6option1N14C_form__cexp_t(&cenum_members_0);
                  }
               }
               else if (tag_0 == 22) {
                  _fx_LT2R9Ast__id_tN14C_form__ctyp_t ci_all_methods_0 = 0;
                  _fx_R23C_form__cdefinterface_t* v_10 = &s_0->u.CDefInterface->data;
                  FX_COPY_PTR(v_10->ci_all_methods, &ci_all_methods_0);
                  _fx_R9Ast__id_t ci_vtbl_0 = v_10->ci_vtbl;
                  _fx_R9Ast__id_t ci_id_0 = v_10->ci_id;
                  _fx_R9Ast__id_t ci_base_0 = v_10->ci_base;
                  _fx_R9Ast__id_t ci_name_0 = v_10->ci_name;
                  FX_CALL(fold_id__0.fp(&ci_name_0, fold_id__0.fcv), _fx_catch_36);
                  FX_CALL(fold_id__0.fp(&ci_base_0, fold_id__0.fcv), _fx_catch_36);
                  FX_CALL(fold_id__0.fp(&ci_id_0, fold_id__0.fcv), _fx_catch_36);
                  FX_CALL(fold_id__0.fp(&ci_vtbl_0, fold_id__0.fcv), _fx_catch_36);
                  _fx_LT2R9Ast__id_tN14C_form__ctyp_t lst_7 = ci_all_methods_0;
                  for (; lst_7; lst_7 = lst_7->tl) {
                     _fx_N14C_form__ctyp_t ctyp_0 = 0;
                     _fx_T2R9Ast__id_tN14C_form__ctyp_t* __pat___3 = &lst_7->hd;
                     _fx_R9Ast__id_t f_7 = __pat___3->t0;
                     FX_COPY_PTR(__pat___3->t1, &ctyp_0);
                     FX_CALL(fold_id__0.fp(&f_7, fold_id__0.fcv), _fx_catch_35);
                     FX_CALL(_fx_M6C_formFM12fold_ctyp_1_v2N14C_form__ctyp_tRM14c_fold_callb_t(ctyp_0, callb_0, 0),
                        _fx_catch_35);

                  _fx_catch_35: ;
                     if (ctyp_0) {
                        _fx_free_N14C_form__ctyp_t(&ctyp_0);
                     }
                     FX_CHECK_EXN(_fx_catch_36);
                  }

               _fx_catch_36: ;
                  if (ci_all_methods_0) {
                     _fx_free_LT2R9Ast__id_tN14C_form__ctyp_t(&ci_all_methods_0);
                  }
               }
               else if (tag_0 == 23) {
                  _fx_LN15C_form__cstmt_t cm_body_0 = 0;
                  _fx_LR9Ast__id_t cm_args_0 = 0;
                  _fx_R19C_form__cdefmacro_t* v_11 = &s_0->u.CMacroDef->data;
                  FX_COPY_PTR(v_11->cm_body, &cm_body_0);
                  FX_COPY_PTR(v_11->cm_args, &cm_args_0);
                  _fx_R9Ast__id_t cm_name_0 = v_11->cm_name;
                  FX_CALL(fold_id__0.fp(&cm_name_0, fold_id__0.fcv), _fx_catch_37);
                  FX_CALL(_fx_M6C_formFM3appv2LR9Ast__id_tFPv1R9Ast__id_t(cm_args_0, &fold_id__0, 0), _fx_catch_37);
                  FX_CALL(_fx_M6C_formFM3appv2LN15C_form__cstmt_tFPv1N15C_form__cstmt_t(cm_body_0, &fold_cstmt__0, 0),
                     _fx_catch_37);

               _fx_catch_37: ;
                  FX_FREE_LIST_SIMPLE(&cm_args_0);
                  if (cm_body_0) {
                     _fx_free_LN15C_form__cstmt_t(&cm_body_0);
                  }
               }
               else if (tag_0 == 24) {
                  FX_CALL(fold_id__0.fp(&s_0->u.CMacroUndef.t0, fold_id__0.fcv), _fx_catch_38);  _fx_catch_38: ;
               }
               else if (tag_0 == 25) {
                  _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t cs_l_0 = 0;
                  _fx_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t* vcase_6 = &s_0->u.CMacroIf;
                  FX_COPY_PTR(vcase_6->t0, &cs_l_0);
                  _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t lst_8 = cs_l_0;
                  for (; lst_8; lst_8 = lst_8->tl) {
                     _fx_N14C_form__cexp_t c_0 = 0;
                     _fx_LN15C_form__cstmt_t sl_2 = 0;
                     _fx_T2N14C_form__cexp_tLN15C_form__cstmt_t* __pat___4 = &lst_8->hd;
                     FX_COPY_PTR(__pat___4->t0, &c_0);
                     FX_COPY_PTR(__pat___4->t1, &sl_2);
                     FX_CALL(_fx_M6C_formFM12fold_cexp_1_v2N14C_form__cexp_tRM14c_fold_callb_t(c_0, callb_0, 0), _fx_catch_39);
                     FX_CALL(fold_csl__0.fp(sl_2, callb_0, fold_csl__0.fcv), _fx_catch_39);

                  _fx_catch_39: ;
                     if (sl_2) {
                        _fx_free_LN15C_form__cstmt_t(&sl_2);
                     }
                     if (c_0) {
                        _fx_free_N14C_form__cexp_t(&c_0);
                     }
                     FX_CHECK_EXN(_fx_catch_40);
                  }
                  FX_CALL(fold_csl__0.fp(vcase_6->t1, callb_0, fold_csl__0.fcv), _fx_catch_40);

               _fx_catch_40: ;
                  if (cs_l_0) {
                     _fx_free_LT2N14C_form__cexp_tLN15C_form__cstmt_t(&cs_l_0);
                  }
               }
               else if (tag_0 != 26) {
                  if (tag_0 != 27) {
                     FX_FAST_THROW(FX_EXN_NoMatchError, _fx_cleanup);
                  }
               }
            }
         }
      }
   }

_fx_cleanup: ;
   FX_FREE_FP(&fold_cstmt__0);
   FX_FREE_FP(&fold_csl__0);
   FX_FREE_FP(&fold_id__0);
   return fx_status;
}

static int _fx_M6C_formFM11fold_cstmt_v1N15C_form__cstmt_t(struct _fx_N15C_form__cstmt_t_data_t* s_0, void* fx_fv)
{
   int fx_status = 0;
   _fx_M6C_formFM11fold_cstmt_v1N15C_form__cstmt_t_cldata_t* cv_0 =
      (_fx_M6C_formFM11fold_cstmt_v1N15C_form__cstmt_t_cldata_t*)fx_fv;
   FX_CALL(_fx_M6C_formFM18check_n_fold_cstmtv2N15C_form__cstmt_tRM14c_fold_callb_t(s_0, &cv_0->t0, 0), _fx_cleanup);

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM7make_fpFPv1N15C_form__cstmt_t1RM14c_fold_callb_t(
   struct _fx_R22C_form__c_fold_callb_t* arg0,
   struct _fx_FPv1N15C_form__cstmt_t* fx_result)
{
   FX_MAKE_FP_IMPL_START(_fx_M6C_formFM11fold_cstmt_v1N15C_form__cstmt_t_cldata_t,
      _fx_free_M6C_formFM11fold_cstmt_v1N15C_form__cstmt_t, _fx_M6C_formFM11fold_cstmt_v1N15C_form__cstmt_t);
   _fx_copy_R22C_form__c_fold_callb_t(arg0, &fcv->t0);
   return 0;
}

static int _fx_M6C_formFM9fold_csl_v2LN15C_form__cstmt_tRM14c_fold_callb_t(
   struct _fx_LN15C_form__cstmt_t_data_t* sl_0,
   struct _fx_R22C_form__c_fold_callb_t* callb_0,
   void* fx_fv)
{
   _fx_FPv1N15C_form__cstmt_t fold_cstmt__0 = {0};
   int fx_status = 0;
   _fx_M6C_formFM9fold_csl_v2LN15C_form__cstmt_tRM14c_fold_callb_t_cldata_t* cv_0 =
      (_fx_M6C_formFM9fold_csl_v2LN15C_form__cstmt_tRM14c_fold_callb_t_cldata_t*)fx_fv;
   _fx_M6C_formFM7make_fpFPv1N15C_form__cstmt_t1RM14c_fold_callb_t(&cv_0->t0, &fold_cstmt__0);
   _fx_LN15C_form__cstmt_t lst_0 = sl_0;
   for (; lst_0; lst_0 = lst_0->tl) {
      _fx_N15C_form__cstmt_t x_0 = lst_0->hd;
      FX_CALL(fold_cstmt__0.fp(x_0, fold_cstmt__0.fcv), _fx_catch_0);

   _fx_catch_0: ;
      FX_CHECK_EXN(_fx_cleanup);
   }

_fx_cleanup: ;
   FX_FREE_FP(&fold_cstmt__0);
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM7make_fpFPv2LN15C_form__cstmt_tRM14c_fold_callb_t1RM14c_fold_callb_t(
   struct _fx_R22C_form__c_fold_callb_t* arg0,
   struct _fx_FPv2LN15C_form__cstmt_tR22C_form__c_fold_callb_t* fx_result)
{
   FX_MAKE_FP_IMPL_START(_fx_M6C_formFM9fold_csl_v2LN15C_form__cstmt_tRM14c_fold_callb_t_cldata_t,
      _fx_free_M6C_formFM9fold_csl_v2LN15C_form__cstmt_tRM14c_fold_callb_t,
      _fx_M6C_formFM9fold_csl_v2LN15C_form__cstmt_tRM14c_fold_callb_t);
   _fx_copy_R22C_form__c_fold_callb_t(arg0, &fcv->t0);
   return 0;
}

static int _fx_M6C_formFM12fold_ctyp_1_v2N14C_form__ctyp_tRM14c_fold_callb_t(
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_R22C_form__c_fold_callb_t* callb_0,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(_fx_M6C_formFM17check_n_fold_ctypv2N14C_form__ctyp_tRM14c_fold_callb_t(t_0, callb_0, 0), _fx_cleanup);

_fx_cleanup: ;
   return fx_status;
}

static int _fx_M6C_formFM8fold_id_v1R9Ast__id_t(struct _fx_R9Ast__id_t* n_0, void* fx_fv)
{
   _fx_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t v_0 = 0;
   int fx_status = 0;
   _fx_M6C_formFM8fold_id_v1R9Ast__id_t_cldata_t* cv_0 = (_fx_M6C_formFM8fold_id_v1R9Ast__id_t_cldata_t*)fx_fv;
   _fx_R22C_form__c_fold_callb_t* callb_0 = &cv_0->t0;
   FX_COPY_PTR(callb_0->ccb_fold_ident, &v_0);
   if ((v_0 != 0) + 1 == 2) {
      _fx_FPv2R9Ast__id_tR22C_form__c_fold_callb_t* f_0 = &v_0->u.Some;
      FX_CALL(f_0->fp(n_0, callb_0, f_0->fcv), _fx_catch_0);

   _fx_catch_0: ;
   }
   if (v_0) {
      _fx_free_Nt6option1FPv2R9Ast__id_tR22C_form__c_fold_callb_t(&v_0);
   }
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM7make_fpFPv1R9Ast__id_t1RM14c_fold_callb_t(
   struct _fx_R22C_form__c_fold_callb_t* arg0,
   struct _fx_FPv1R9Ast__id_t* fx_result)
{
   FX_MAKE_FP_IMPL_START(_fx_M6C_formFM8fold_id_v1R9Ast__id_t_cldata_t, _fx_free_M6C_formFM8fold_id_v1R9Ast__id_t,
      _fx_M6C_formFM8fold_id_v1R9Ast__id_t);
   _fx_copy_R22C_form__c_fold_callb_t(arg0, &fcv->t0);
   return 0;
}

static int _fx_M6C_formFM12fold_cexp_1_v2N14C_form__cexp_tRM14c_fold_callb_t(
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   struct _fx_R22C_form__c_fold_callb_t* callb_0,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(_fx_M6C_formFM17check_n_fold_cexpv2N14C_form__cexp_tRM14c_fold_callb_t(e_0, callb_0, 0), _fx_cleanup);

_fx_cleanup: ;
   return fx_status;
}

static int _fx_M6C_formFM14fold_cexp_opt_v2Nt6option1N14C_form__cexp_tRM14c_fold_callb_t(
   struct _fx_Nt6option1N14C_form__cexp_t* e_opt_0,
   struct _fx_R22C_form__c_fold_callb_t* callb_0,
   void* fx_fv)
{
   int fx_status = 0;
   if (e_opt_0->tag == 2) {
      FX_CALL(_fx_M6C_formFM17check_n_fold_cexpv2N14C_form__cexp_tRM14c_fold_callb_t(e_opt_0->u.Some, callb_0, 0), _fx_catch_0);

   _fx_catch_0: ;
   }
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM8ctyp2strT2SR9Ast__id_t2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_T2SR9Ast__id_t* fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   int tag_0 = FX_REC_VARIANT_TAG(t_0);
   if (tag_0 == 1) {
      fx_str_t slit_0 = FX_MAKE_STR("int_"); _fx_make_T2SR9Ast__id_t(&slit_0, &_fx_g9Ast__noid, fx_result); goto _fx_endmatch_0;
   }
   if (tag_0 == 6) {
      fx_str_t slit_1 = FX_MAKE_STR("fx_long_t");
      _fx_make_T2SR9Ast__id_t(&slit_1, &_fx_g9Ast__noid, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 2) {
      fx_str_t slit_2 = FX_MAKE_STR("int"); _fx_make_T2SR9Ast__id_t(&slit_2, &_fx_g9Ast__noid, fx_result); goto _fx_endmatch_0;
   }
   if (tag_0 == 3) {
      fx_str_t slit_3 = FX_MAKE_STR("size_t");
      _fx_make_T2SR9Ast__id_t(&slit_3, &_fx_g9Ast__noid, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 4) {
      fx_str_t v_0 = {0};
      fx_str_t v_1 = {0};
      FX_CALL(_fx_F6stringS1i(t_0->u.CTypSInt, &v_0, 0), _fx_catch_0);
      fx_str_t slit_4 = FX_MAKE_STR("int");
      fx_str_t slit_5 = FX_MAKE_STR("_t");
      {
         const fx_str_t strs_0[] = { slit_4, v_0, slit_5 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_0, 3, &v_1), _fx_catch_0);
      }
      _fx_make_T2SR9Ast__id_t(&v_1, &_fx_g9Ast__noid, fx_result);

   _fx_catch_0: ;
      FX_FREE_STR(&v_1);
      FX_FREE_STR(&v_0);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 5) {
      fx_str_t v_2 = {0};
      fx_str_t v_3 = {0};
      FX_CALL(_fx_F6stringS1i(t_0->u.CTypUInt, &v_2, 0), _fx_catch_1);
      fx_str_t slit_6 = FX_MAKE_STR("uint");
      fx_str_t slit_7 = FX_MAKE_STR("_t");
      {
         const fx_str_t strs_1[] = { slit_6, v_2, slit_7 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_1, 3, &v_3), _fx_catch_1);
      }
      _fx_make_T2SR9Ast__id_t(&v_3, &_fx_g9Ast__noid, fx_result);

   _fx_catch_1: ;
      FX_FREE_STR(&v_3);
      FX_FREE_STR(&v_2);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 7) {
      if (t_0->u.CTypFloat == 16) {
         fx_str_t slit_8 = FX_MAKE_STR("fx_f16");
         _fx_make_T2SR9Ast__id_t(&slit_8, &_fx_g9Ast__noid, fx_result);
         goto _fx_endmatch_0;
      }
   }
   if (tag_0 == 7) {
      if (t_0->u.CTypFloat == 32) {
         fx_str_t slit_9 = FX_MAKE_STR("float");
         _fx_make_T2SR9Ast__id_t(&slit_9, &_fx_g9Ast__noid, fx_result);
         goto _fx_endmatch_0;
      }
   }
   if (tag_0 == 7) {
      if (t_0->u.CTypFloat == 64) {
         fx_str_t slit_10 = FX_MAKE_STR("double");
         _fx_make_T2SR9Ast__id_t(&slit_10, &_fx_g9Ast__noid, fx_result);
         goto _fx_endmatch_0;
      }
   }
   if (tag_0 == 7) {
      fx_str_t v_4 = {0};
      fx_str_t v_5 = {0};
      fx_exn_t v_6 = {0};
      FX_CALL(_fx_F6stringS1i(t_0->u.CTypFloat, &v_4, 0), _fx_catch_2);
      fx_str_t slit_11 = FX_MAKE_STR("invalid type CTypFloat(");
      fx_str_t slit_12 = FX_MAKE_STR(")");
      {
         const fx_str_t strs_2[] = { slit_11, v_4, slit_12 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_2, 3, &v_5), _fx_catch_2);
      }
      FX_CALL(_fx_M3AstFM11compile_errE2RM5loc_tS(loc_0, &v_5, &v_6, 0), _fx_catch_2);
      FX_THROW(&v_6, false, _fx_catch_2);

   _fx_catch_2: ;
      fx_free_exn(&v_6);
      FX_FREE_STR(&v_5);
      FX_FREE_STR(&v_4);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 12) {
      fx_str_t slit_13 = FX_MAKE_STR("fx_str_t");
      _fx_make_T2SR9Ast__id_t(&slit_13, &_fx_g9Ast__noid, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 10) {
      fx_str_t slit_14 = FX_MAKE_STR("char_");
      _fx_make_T2SR9Ast__id_t(&slit_14, &_fx_g9Ast__noid, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 9) {
      fx_str_t slit_15 = FX_MAKE_STR("bool");
      _fx_make_T2SR9Ast__id_t(&slit_15, &_fx_g9Ast__noid, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 8) {
      fx_str_t slit_16 = FX_MAKE_STR("void");
      _fx_make_T2SR9Ast__id_t(&slit_16, &_fx_g9Ast__noid, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 13) {
      fx_str_t slit_17 = FX_MAKE_STR("fx_exn_t");
      _fx_make_T2SR9Ast__id_t(&slit_17, &_fx_g9Ast__noid, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 16) {
      fx_exn_t v_7 = {0};
      fx_str_t slit_18 = FX_MAKE_STR("ctyp2str: raw function pointer type is not supported; use CTypName(...) instead");
      FX_CALL(_fx_M3AstFM11compile_errE2RM5loc_tS(loc_0, &slit_18, &v_7, 0), _fx_catch_3);
      FX_THROW(&v_7, false, _fx_catch_3);

   _fx_catch_3: ;
      fx_free_exn(&v_7);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 11) {
      fx_str_t slit_19 = FX_MAKE_STR("fx_cptr_t");
      _fx_make_T2SR9Ast__id_t(&slit_19, &_fx_g9Ast__noid, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 14) {
      fx_exn_t v_8 = {0};
      fx_str_t slit_20 = FX_MAKE_STR("ctyp2str: CTypStruct(...) is not supported; use CTypName(...) instead");
      FX_CALL(_fx_M3AstFM11compile_errE2RM5loc_tS(loc_0, &slit_20, &v_8, 0), _fx_catch_4);
      FX_THROW(&v_8, false, _fx_catch_4);

   _fx_catch_4: ;
      fx_free_exn(&v_8);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 15) {
      fx_exn_t v_9 = {0};
      fx_str_t slit_21 = FX_MAKE_STR("ctyp2str: CTypUnion(...) is not supported; use CTypName(...) instead");
      FX_CALL(_fx_M3AstFM11compile_errE2RM5loc_tS(loc_0, &slit_21, &v_9, 0), _fx_catch_5);
      FX_THROW(&v_9, false, _fx_catch_5);

   _fx_catch_5: ;
      fx_free_exn(&v_9);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 17) {
      _fx_T2SR9Ast__id_t v_10 = {0};
      fx_str_t s_0 = {0};
      _fx_LN19C_form__ctyp_attr_t attrs_0 = 0;
      fx_str_t s_1 = {0};
      _fx_LN19C_form__ctyp_attr_t attrs_1 = 0;
      fx_str_t s_2 = {0};
      _fx_LN19C_form__ctyp_attr_t attrs_2 = 0;
      fx_str_t s_3 = {0};
      fx_str_t v_11 = {0};
      _fx_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t* vcase_0 = &t_0->u.CTypRawPtr;
      _fx_LN19C_form__ctyp_attr_t attrs_3 = vcase_0->t0;
      FX_CALL(_fx_M6C_formFM8ctyp2strT2SR9Ast__id_t2N14C_form__ctyp_tR10Ast__loc_t(vcase_0->t1, loc_0, &v_10, 0), _fx_catch_9);
      fx_copy_str(&v_10.t0, &s_0);
      bool __fold_result___0 = false;
      FX_COPY_PTR(attrs_3, &attrs_0);
      _fx_LN19C_form__ctyp_attr_t lst_0 = attrs_0;
      for (; lst_0; lst_0 = lst_0->tl) {
         _fx_N19C_form__ctyp_attr_t* b_0 = &lst_0->hd;
         if (3 == b_0->tag) {
            __fold_result___0 = true; FX_BREAK(_fx_catch_6);
         }

      _fx_catch_6: ;
         FX_CHECK_BREAK();
         FX_CHECK_EXN(_fx_catch_9);
      }
      if (__fold_result___0) {
         fx_str_t slit_22 = FX_MAKE_STR("static ");
         {
            const fx_str_t strs_3[] = { slit_22, s_0 };
            FX_CALL(fx_strjoin(0, 0, 0, strs_3, 2, &s_1), _fx_catch_9);
         }
      }
      else {
         fx_copy_str(&s_0, &s_1);
      }
      bool __fold_result___1 = false;
      FX_COPY_PTR(attrs_3, &attrs_1);
      _fx_LN19C_form__ctyp_attr_t lst_1 = attrs_1;
      for (; lst_1; lst_1 = lst_1->tl) {
         _fx_N19C_form__ctyp_attr_t* b_1 = &lst_1->hd;
         if (1 == b_1->tag) {
            __fold_result___1 = true; FX_BREAK(_fx_catch_7);
         }

      _fx_catch_7: ;
         FX_CHECK_BREAK();
         FX_CHECK_EXN(_fx_catch_9);
      }
      if (__fold_result___1) {
         fx_str_t slit_23 = FX_MAKE_STR("const ");
         {
            const fx_str_t strs_4[] = { slit_23, s_1 };
            FX_CALL(fx_strjoin(0, 0, 0, strs_4, 2, &s_2), _fx_catch_9);
         }
      }
      else {
         fx_copy_str(&s_1, &s_2);
      }
      bool __fold_result___2 = false;
      FX_COPY_PTR(attrs_3, &attrs_2);
      _fx_LN19C_form__ctyp_attr_t lst_2 = attrs_2;
      for (; lst_2; lst_2 = lst_2->tl) {
         _fx_N19C_form__ctyp_attr_t* b_2 = &lst_2->hd;
         if (2 == b_2->tag) {
            __fold_result___2 = true; FX_BREAK(_fx_catch_8);
         }

      _fx_catch_8: ;
         FX_CHECK_BREAK();
         FX_CHECK_EXN(_fx_catch_9);
      }
      if (__fold_result___2) {
         fx_str_t slit_24 = FX_MAKE_STR("volatile ");
         {
            const fx_str_t strs_5[] = { slit_24, s_2 };
            FX_CALL(fx_strjoin(0, 0, 0, strs_5, 2, &s_3), _fx_catch_9);
         }
      }
      else {
         fx_copy_str(&s_2, &s_3);
      }
      fx_str_t slit_25 = FX_MAKE_STR("*");
      {
         const fx_str_t strs_6[] = { s_3, slit_25 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_6, 2, &v_11), _fx_catch_9);
      }
      _fx_make_T2SR9Ast__id_t(&v_11, &_fx_g9Ast__noid, fx_result);

   _fx_catch_9: ;
      FX_FREE_STR(&v_11);
      FX_FREE_STR(&s_3);
      FX_FREE_LIST_SIMPLE(&attrs_2);
      FX_FREE_STR(&s_2);
      FX_FREE_LIST_SIMPLE(&attrs_1);
      FX_FREE_STR(&s_1);
      FX_FREE_LIST_SIMPLE(&attrs_0);
      FX_FREE_STR(&s_0);
      _fx_free_T2SR9Ast__id_t(&v_10);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 18) {
      _fx_T2SR9Ast__id_t v_12 = {0};
      fx_str_t s_4 = {0};
      _fx_LN19C_form__ctyp_attr_t attrs_4 = 0;
      fx_str_t s_5 = {0};
      _fx_LN19C_form__ctyp_attr_t attrs_5 = 0;
      fx_str_t s_6 = {0};
      _fx_LN19C_form__ctyp_attr_t attrs_6 = 0;
      fx_str_t s_7 = {0};
      fx_str_t v_13 = {0};
      _fx_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t* vcase_1 = &t_0->u.CTypRawArray;
      _fx_LN19C_form__ctyp_attr_t attrs_7 = vcase_1->t0;
      FX_CALL(_fx_M6C_formFM8ctyp2strT2SR9Ast__id_t2N14C_form__ctyp_tR10Ast__loc_t(vcase_1->t1, loc_0, &v_12, 0), _fx_catch_13);
      fx_copy_str(&v_12.t0, &s_4);
      bool __fold_result___3 = false;
      FX_COPY_PTR(attrs_7, &attrs_4);
      _fx_LN19C_form__ctyp_attr_t lst_3 = attrs_4;
      for (; lst_3; lst_3 = lst_3->tl) {
         _fx_N19C_form__ctyp_attr_t* b_3 = &lst_3->hd;
         if (3 == b_3->tag) {
            __fold_result___3 = true; FX_BREAK(_fx_catch_10);
         }

      _fx_catch_10: ;
         FX_CHECK_BREAK();
         FX_CHECK_EXN(_fx_catch_13);
      }
      if (__fold_result___3) {
         fx_str_t slit_26 = FX_MAKE_STR("static ");
         {
            const fx_str_t strs_7[] = { slit_26, s_4 };
            FX_CALL(fx_strjoin(0, 0, 0, strs_7, 2, &s_5), _fx_catch_13);
         }
      }
      else {
         fx_copy_str(&s_4, &s_5);
      }
      bool __fold_result___4 = false;
      FX_COPY_PTR(attrs_7, &attrs_5);
      _fx_LN19C_form__ctyp_attr_t lst_4 = attrs_5;
      for (; lst_4; lst_4 = lst_4->tl) {
         _fx_N19C_form__ctyp_attr_t* b_4 = &lst_4->hd;
         if (1 == b_4->tag) {
            __fold_result___4 = true; FX_BREAK(_fx_catch_11);
         }

      _fx_catch_11: ;
         FX_CHECK_BREAK();
         FX_CHECK_EXN(_fx_catch_13);
      }
      if (__fold_result___4) {
         fx_str_t slit_27 = FX_MAKE_STR("const ");
         {
            const fx_str_t strs_8[] = { slit_27, s_5 };
            FX_CALL(fx_strjoin(0, 0, 0, strs_8, 2, &s_6), _fx_catch_13);
         }
      }
      else {
         fx_copy_str(&s_5, &s_6);
      }
      bool __fold_result___5 = false;
      FX_COPY_PTR(attrs_7, &attrs_6);
      _fx_LN19C_form__ctyp_attr_t lst_5 = attrs_6;
      for (; lst_5; lst_5 = lst_5->tl) {
         _fx_N19C_form__ctyp_attr_t* b_5 = &lst_5->hd;
         if (2 == b_5->tag) {
            __fold_result___5 = true; FX_BREAK(_fx_catch_12);
         }

      _fx_catch_12: ;
         FX_CHECK_BREAK();
         FX_CHECK_EXN(_fx_catch_13);
      }
      if (__fold_result___5) {
         fx_str_t slit_28 = FX_MAKE_STR("volatile ");
         {
            const fx_str_t strs_9[] = { slit_28, s_6 };
            FX_CALL(fx_strjoin(0, 0, 0, strs_9, 2, &s_7), _fx_catch_13);
         }
      }
      else {
         fx_copy_str(&s_6, &s_7);
      }
      fx_str_t slit_29 = FX_MAKE_STR(" []");
      {
         const fx_str_t strs_10[] = { s_7, slit_29 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_10, 2, &v_13), _fx_catch_13);
      }
      _fx_make_T2SR9Ast__id_t(&v_13, &_fx_g9Ast__noid, fx_result);

   _fx_catch_13: ;
      FX_FREE_STR(&v_13);
      FX_FREE_STR(&s_7);
      FX_FREE_LIST_SIMPLE(&attrs_6);
      FX_FREE_STR(&s_6);
      FX_FREE_LIST_SIMPLE(&attrs_5);
      FX_FREE_STR(&s_5);
      FX_FREE_LIST_SIMPLE(&attrs_4);
      FX_FREE_STR(&s_4);
      _fx_free_T2SR9Ast__id_t(&v_12);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 19) {
      fx_str_t slit_30 = FX_MAKE_STR("fx_arr_t");
      _fx_make_T2SR9Ast__id_t(&slit_30, &_fx_g9Ast__noid, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 20) {
      fx_str_t slit_31 = FX_MAKE_STR("fx_rrbvec_t");
      _fx_make_T2SR9Ast__id_t(&slit_31, &_fx_g9Ast__noid, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 21) {
      fx_str_t cname_0 = {0};
      _fx_R9Ast__id_t* n_0 = &t_0->u.CTypName;
      FX_CALL(_fx_M6C_formFM13get_idc_cnameS2R9Ast__id_tR10Ast__loc_t(n_0, loc_0, &cname_0, 0), _fx_catch_14);
      _fx_make_T2SR9Ast__id_t(&cname_0, n_0, fx_result);

   _fx_catch_14: ;
      FX_FREE_STR(&cname_0);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 22) {
      fx_exn_t v_14 = {0};
      fx_str_t slit_32 = FX_MAKE_STR("ctyp2str: CTypLabel is not supported");
      FX_CALL(_fx_M3AstFM11compile_errE2RM5loc_tS(loc_0, &slit_32, &v_14, 0), _fx_catch_15);
      FX_THROW(&v_14, false, _fx_catch_15);

   _fx_catch_15: ;
      fx_free_exn(&v_14);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 23) {
      fx_exn_t v_15 = {0};
      fx_str_t slit_33 = FX_MAKE_STR("ctyp2str: CTypAny is not supported");
      FX_CALL(_fx_M3AstFM11compile_errE2RM5loc_tS(loc_0, &slit_33, &v_15, 0), _fx_catch_16);
      FX_THROW(&v_15, false, _fx_catch_16);

   _fx_catch_16: ;
      fx_free_exn(&v_15);
      goto _fx_endmatch_0;
   }
   FX_FAST_THROW(FX_EXN_NoMatchError, _fx_cleanup);

_fx_endmatch_0: ;

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM7idc2strS2R9Ast__id_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* n_0,
   struct _fx_R10Ast__loc_t* loc_0,
   fx_str_t* fx_result,
   void* fx_fv)
{
   fx_str_t cname_0 = {0};
   fx_str_t v_0 = {0};
   fx_str_t v_1 = {0};
   int fx_status = 0;
   FX_CALL(_fx_M6C_formFM13get_idc_cnameS2R9Ast__id_tR10Ast__loc_t(n_0, loc_0, &cname_0, 0), _fx_cleanup);
   if (FX_STR_LENGTH(cname_0) != 0) {
      fx_copy_str(&cname_0, fx_result);
   }
   else if (n_0->m == 0) {
      int_ v_2 = n_0->i;
      FX_CHKIDX(FX_CHKIDX1(_fx_g14Ast__all_names->u.t.t1, 0, v_2), _fx_cleanup);
      fx_copy_str(FX_PTR_1D(fx_str_t, _fx_g14Ast__all_names->u.t.t1, v_2), fx_result);
   }
   else {
      int_ v_3 = n_0->i;
      FX_CHKIDX(FX_CHKIDX1(_fx_g14Ast__all_names->u.t.t1, 0, v_3), _fx_cleanup);
      fx_copy_str(FX_PTR_1D(fx_str_t, _fx_g14Ast__all_names->u.t.t1, v_3), &v_0);
      FX_CALL(_fx_F6stringS1i(n_0->j, &v_1, 0), _fx_cleanup);
      fx_str_t slit_0 = FX_MAKE_STR("_");
      {
         const fx_str_t strs_0[] = { v_0, slit_0, v_1 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_0, 3, fx_result), _fx_cleanup);
      }
   }

_fx_cleanup: ;
   FX_FREE_STR(&cname_0);
   FX_FREE_STR(&v_0);
   FX_FREE_STR(&v_1);
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM9ctyp2str_S2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_R10Ast__loc_t* loc_0,
   fx_str_t* fx_result,
   void* fx_fv)
{
   _fx_T2SR9Ast__id_t v_0 = {0};
   int fx_status = 0;
   FX_CALL(_fx_M6C_formFM8ctyp2strT2SR9Ast__id_t2N14C_form__ctyp_tR10Ast__loc_t(t_0, loc_0, &v_0, 0), _fx_cleanup);
   fx_copy_str(&v_0.t0, fx_result);

_fx_cleanup: ;
   _fx_free_T2SR9Ast__id_t(&v_0);
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM8make_ptrN14C_form__ctyp_t1N14C_form__ctyp_t(
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_N14C_form__ctyp_t_data_t** fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   if (FX_REC_VARIANT_TAG(t_0) == 23) {
      FX_CALL(
         _fx_M6C_formFM10CTypRawPtrN14C_form__ctyp_t2LN19C_form__ctyp_attr_tN14C_form__ctyp_t(0, _fx_g16C_form__CTypVoid,
            fx_result), _fx_catch_0);

   _fx_catch_0: ;
   }
   else {
      FX_CALL(_fx_M6C_formFM10CTypRawPtrN14C_form__ctyp_t2LN19C_form__ctyp_attr_tN14C_form__ctyp_t(0, t_0, fx_result),
         _fx_catch_1);

   _fx_catch_1: ;
   }
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM14make_const_ptrN14C_form__ctyp_t1N14C_form__ctyp_t(
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_N14C_form__ctyp_t_data_t** fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   if (FX_REC_VARIANT_TAG(t_0) == 23) {
      _fx_LN19C_form__ctyp_attr_t v_0 = 0;
      FX_CALL(_fx_cons_LN19C_form__ctyp_attr_t(&_fx_g17C_form__CTypConst, 0, true, &v_0), _fx_catch_0);
      FX_CALL(
         _fx_M6C_formFM10CTypRawPtrN14C_form__ctyp_t2LN19C_form__ctyp_attr_tN14C_form__ctyp_t(v_0, _fx_g16C_form__CTypVoid,
            fx_result), _fx_catch_0);

   _fx_catch_0: ;
      FX_FREE_LIST_SIMPLE(&v_0);
   }
   else {
      _fx_LN19C_form__ctyp_attr_t v_1 = 0;
      FX_CALL(_fx_cons_LN19C_form__ctyp_attr_t(&_fx_g17C_form__CTypConst, 0, true, &v_1), _fx_catch_1);
      FX_CALL(_fx_M6C_formFM10CTypRawPtrN14C_form__ctyp_t2LN19C_form__ctyp_attr_tN14C_form__ctyp_t(v_1, t_0, fx_result),
         _fx_catch_1);

   _fx_catch_1: ;
      FX_FREE_LIST_SIMPLE(&v_1);
   }
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM12make_lit_expN14C_form__cexp_t2N14K_form__klit_tR10Ast__loc_t(
   struct _fx_N14K_form__klit_t* l_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_N14C_form__cexp_t_data_t** fx_result,
   void* fx_fv)
{
   _fx_N14C_form__ctyp_t t_0 = 0;
   _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_0 = {0};
   int fx_status = 0;
   int tag_0 = l_0->tag;
   if (tag_0 == 1) {
      FX_COPY_PTR(_fx_g15C_form__CTypInt, &t_0);
   }
   else if (tag_0 == 2) {
      FX_CALL(_fx_M6C_formFM8CTypSIntN14C_form__ctyp_t1i(l_0->u.KLitSInt.t0, &t_0), _fx_catch_0);  _fx_catch_0: ;
   }
   else if (tag_0 == 3) {
      FX_CALL(_fx_M6C_formFM8CTypUIntN14C_form__ctyp_t1i(l_0->u.KLitUInt.t0, &t_0), _fx_catch_1);  _fx_catch_1: ;
   }
   else if (tag_0 == 4) {
      FX_CALL(_fx_M6C_formFM9CTypFloatN14C_form__ctyp_t1i(l_0->u.KLitFloat.t0, &t_0), _fx_catch_2);  _fx_catch_2: ;
   }
   else if (tag_0 == 5) {
      FX_COPY_PTR(_fx_g18C_form__CTypString, &t_0);
   }
   else if (tag_0 == 6) {
      FX_COPY_PTR(_fx_g19C_form__CTypUniChar, &t_0);
   }
   else if (tag_0 == 7) {
      FX_COPY_PTR(_fx_g16C_form__CTypBool, &t_0);
   }
   else if (tag_0 == 8) {
      _fx_N14K_form__ktyp_t t_1 = l_0->u.KLitNil;
      if (FX_REC_VARIANT_TAG(t_1) == 16) {
         FX_CALL(_fx_M6C_formFM8CTypNameN14C_form__ctyp_t1R9Ast__id_t(&t_1->u.KTypName, &t_0), _fx_catch_3);  _fx_catch_3: ;
      }
      else {
         FX_CALL(
            _fx_M6C_formFM10CTypRawPtrN14C_form__ctyp_t2LN19C_form__ctyp_attr_tN14C_form__ctyp_t(0, _fx_g16C_form__CTypVoid,
               &t_0), _fx_catch_4);

      _fx_catch_4: ;
      }
      FX_CHECK_EXN(_fx_catch_5);

   _fx_catch_5: ;
   }
   else {
      FX_FAST_THROW(FX_EXN_NoMatchError, _fx_cleanup);
   }
   FX_CHECK_EXN(_fx_cleanup);
   _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(t_0, loc_0, &v_0);
   FX_CALL(_fx_M6C_formFM7CExpLitN14C_form__cexp_t2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t(l_0, &v_0, fx_result),
      _fx_cleanup);

_fx_cleanup: ;
   if (t_0) {
      _fx_free_N14C_form__ctyp_t(&t_0);
   }
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_0);
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM13make_int__expN14C_form__cexp_t2lR10Ast__loc_t(
   int64_t i_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_N14C_form__cexp_t_data_t** fx_result,
   void* fx_fv)
{
   _fx_N14K_form__klit_t v_0 = {0};
   _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_1 = {0};
   int fx_status = 0;
   _fx_M6K_formFM7KLitIntN14K_form__klit_t1l(i_0, &v_0);
   _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(_fx_g15C_form__CTypInt, loc_0, &v_1);
   FX_CALL(_fx_M6C_formFM7CExpLitN14C_form__cexp_t2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t(&v_0, &v_1, fx_result),
      _fx_cleanup);

_fx_cleanup: ;
   _fx_free_N14K_form__klit_t(&v_0);
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_1);
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM12make_int_expN14C_form__cexp_t2iR10Ast__loc_t(
   int_ i_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_N14C_form__cexp_t_data_t** fx_result,
   void* fx_fv)
{
   _fx_N14K_form__klit_t v_0 = {0};
   _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_1 = {0};
   int fx_status = 0;
   _fx_M6K_formFM7KLitIntN14K_form__klit_t1l((int64_t)i_0, &v_0);
   _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(_fx_g15C_form__CTypInt, loc_0, &v_1);
   FX_CALL(_fx_M6C_formFM7CExpLitN14C_form__cexp_t2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t(&v_0, &v_1, fx_result),
      _fx_cleanup);

_fx_cleanup: ;
   _fx_free_N14K_form__klit_t(&v_0);
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_1);
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM13make_bool_expN14C_form__cexp_t2BR10Ast__loc_t(
   bool b_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_N14C_form__cexp_t_data_t** fx_result,
   void* fx_fv)
{
   _fx_N14K_form__klit_t v_0 = {0};
   _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_1 = {0};
   int fx_status = 0;
   _fx_M6K_formFM8KLitBoolN14K_form__klit_t1B(b_0, &v_0);
   _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(_fx_g16C_form__CTypBool, loc_0, &v_1);
   FX_CALL(_fx_M6C_formFM7CExpLitN14C_form__cexp_t2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t(&v_0, &v_1, fx_result),
      _fx_cleanup);

_fx_cleanup: ;
   _fx_free_N14K_form__klit_t(&v_0);
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_1);
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM12make_nullptrN14C_form__cexp_t1R10Ast__loc_t(
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_N14C_form__cexp_t_data_t** fx_result,
   void* fx_fv)
{
   _fx_N14K_form__klit_t v_0 = {0};
   _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_1 = {0};
   int fx_status = 0;
   _fx_M6K_formFM7KLitNilN14K_form__klit_t1N14K_form__ktyp_t(_fx_g16C_form__KTypVoid, &v_0);
   _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(_fx_g23C_form__std_CTypVoidPtr, loc_0, &v_1);
   FX_CALL(_fx_M6C_formFM7CExpLitN14C_form__cexp_t2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t(&v_0, &v_1, fx_result),
      _fx_cleanup);

_fx_cleanup: ;
   _fx_free_N14K_form__klit_t(&v_0);
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_1);
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM11make_id_expN14C_form__cexp_t2R9Ast__id_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* i_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_N14C_form__cexp_t_data_t** fx_result,
   void* fx_fv)
{
   _fx_N14C_form__ctyp_t t_0 = 0;
   _fx_N15C_form__cinfo_t v_0 = {0};
   _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_1 = {0};
   int fx_status = 0;
   if (i_0->m == 0) {
      FX_COPY_PTR(_fx_g15C_form__CTypAny, &t_0);
   }
   else {
      _fx_Ta2i v_2;
      FX_CALL(_fx_M3AstFM7id2idx_Ta2i2RM4id_tRM5loc_t(i_0, loc_0, &v_2, 0), _fx_cleanup);
      int_ m_0 = v_2.t0;
      int_ j_0 = v_2.t1;
      FX_CHKIDX(FX_CHKIDX1(_fx_g16C_form__all_idcs, 0, m_0), _fx_cleanup);
      FX_CHKIDX(FX_CHKIDX1((*FX_PTR_1D(_fx_Nt9Dynvec__t1N15C_form__cinfo_t, _fx_g16C_form__all_idcs, m_0))->u.t.t1, 0, j_0),
         _fx_cleanup);
      _fx_copy_N15C_form__cinfo_t(
         FX_PTR_1D(_fx_N15C_form__cinfo_t,
            (*FX_PTR_1D(_fx_Nt9Dynvec__t1N15C_form__cinfo_t, _fx_g16C_form__all_idcs, m_0))->u.t.t1, j_0), &v_0);
      FX_CALL(
         _fx_M6C_formFM13get_cinfo_typN14C_form__ctyp_t3N15C_form__cinfo_tR9Ast__id_tR10Ast__loc_t(&v_0, i_0, loc_0, &t_0, 0),
         _fx_cleanup);
   }
   _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(t_0, loc_0, &v_1);
   FX_CALL(_fx_M6C_formFM9CExpIdentN14C_form__cexp_t2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(i_0, &v_1, fx_result),
      _fx_cleanup);

_fx_cleanup: ;
   if (t_0) {
      _fx_free_N14C_form__ctyp_t(&t_0);
   }
   _fx_free_N15C_form__cinfo_t(&v_0);
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_1);
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM13make_id_t_expN14C_form__cexp_t3R9Ast__id_tN14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* i_0,
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_N14C_form__cexp_t_data_t** fx_result,
   void* fx_fv)
{
   _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_0 = {0};
   int fx_status = 0;
   _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(t_0, loc_0, &v_0);
   FX_CALL(_fx_M6C_formFM9CExpIdentN14C_form__cexp_t2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(i_0, &v_0, fx_result),
      _fx_cleanup);

_fx_cleanup: ;
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_0);
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM9make_callN14C_form__cexp_t4R9Ast__id_tLN14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* f_0,
   struct _fx_LN14C_form__cexp_t_data_t* args_0,
   struct _fx_N14C_form__ctyp_t_data_t* rt_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_N14C_form__cexp_t_data_t** fx_result,
   void* fx_fv)
{
   _fx_N14C_form__ctyp_t t_0 = 0;
   _fx_N15C_form__cinfo_t v_0 = {0};
   _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_1 = {0};
   _fx_N14C_form__cexp_t f_exp_0 = 0;
   _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_2 = {0};
   int fx_status = 0;
   if (f_0->m == 0) {
      FX_COPY_PTR(_fx_g15C_form__CTypAny, &t_0);
   }
   else {
      _fx_Ta2i v_3;
      FX_CALL(_fx_M3AstFM7id2idx_Ta2i2RM4id_tRM5loc_t(f_0, loc_0, &v_3, 0), _fx_cleanup);
      int_ m_0 = v_3.t0;
      int_ j_0 = v_3.t1;
      FX_CHKIDX(FX_CHKIDX1(_fx_g16C_form__all_idcs, 0, m_0), _fx_cleanup);
      FX_CHKIDX(FX_CHKIDX1((*FX_PTR_1D(_fx_Nt9Dynvec__t1N15C_form__cinfo_t, _fx_g16C_form__all_idcs, m_0))->u.t.t1, 0, j_0),
         _fx_cleanup);
      _fx_copy_N15C_form__cinfo_t(
         FX_PTR_1D(_fx_N15C_form__cinfo_t,
            (*FX_PTR_1D(_fx_Nt9Dynvec__t1N15C_form__cinfo_t, _fx_g16C_form__all_idcs, m_0))->u.t.t1, j_0), &v_0);
      FX_CALL(
         _fx_M6C_formFM13get_cinfo_typN14C_form__ctyp_t3N15C_form__cinfo_tR9Ast__id_tR10Ast__loc_t(&v_0, f_0, loc_0, &t_0, 0),
         _fx_cleanup);
   }
   _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(t_0, loc_0, &v_1);
   FX_CALL(_fx_M6C_formFM9CExpIdentN14C_form__cexp_t2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(f_0, &v_1, &f_exp_0),
      _fx_cleanup);
   _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(rt_0, loc_0, &v_2);
   FX_CALL(
      _fx_M6C_formFM8CExpCallN14C_form__cexp_t3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(f_exp_0,
         args_0, &v_2, fx_result), _fx_cleanup);

_fx_cleanup: ;
   if (t_0) {
      _fx_free_N14C_form__ctyp_t(&t_0);
   }
   _fx_free_N15C_form__cinfo_t(&v_0);
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_1);
   if (f_exp_0) {
      _fx_free_N14C_form__cexp_t(&f_exp_0);
   }
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_2);
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM14make_dummy_expN14C_form__cexp_t1R10Ast__loc_t(
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_N14C_form__cexp_t_data_t** fx_result,
   void* fx_fv)
{
   _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_0 = {0};
   int fx_status = 0;
   _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(_fx_g16C_form__CTypVoid, loc_0, &v_0);
   FX_CALL(_fx_M6C_formFM8CExpInitN14C_form__cexp_t2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(0, &v_0, fx_result),
      _fx_cleanup);

_fx_cleanup: ;
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_0);
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM11make_assignN14C_form__cexp_t2N14C_form__cexp_tN14C_form__cexp_t(
   struct _fx_N14C_form__cexp_t_data_t* lhs_0,
   struct _fx_N14C_form__cexp_t_data_t* rhs_0,
   struct _fx_N14C_form__cexp_t_data_t** fx_result,
   void* fx_fv)
{
   _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_0 = {0};
   _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_1 = {0};
   int fx_status = 0;
   FX_CALL(_fx_M6C_formFM12get_cexp_ctxT2N14C_form__ctyp_tR10Ast__loc_t1N14C_form__cexp_t(rhs_0, &v_0, 0), _fx_cleanup);
   _fx_R10Ast__loc_t loc_0 = v_0.t1;
   _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(_fx_g16C_form__CTypVoid, &loc_0, &v_1);
   FX_CALL(
      _fx_M6C_formFM10CExpBinaryN14C_form__cexp_t4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
         &_fx_g17C_form__COpAssign, lhs_0, rhs_0, &v_1, fx_result), _fx_cleanup);

_fx_cleanup: ;
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_0);
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_1);
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM13cexp_get_addrN14C_form__cexp_t1N14C_form__cexp_t(
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   struct _fx_N14C_form__cexp_t_data_t** fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   int tag_0 = FX_REC_VARIANT_TAG(e_0);
   if (tag_0 == 4) {
      _fx_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_0 = &e_0->u.CExpUnary;
      if (vcase_0->t0.tag == 5) {
         FX_COPY_PTR(vcase_0->t1, fx_result); goto _fx_endmatch_0;
      }
   }
   if (tag_0 == 3) {
      _fx_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_1 =
         &e_0->u.CExpBinary;
      if (vcase_1->t0.tag == 14) {
         _fx_N14C_form__ctyp_t v_0 = 0;
         _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_1 = {0};
         _fx_T2N14C_form__ctyp_tR10Ast__loc_t* v_2 = &vcase_1->t3;
         _fx_N14C_form__ctyp_t t_0 = v_2->t0;
         if (FX_REC_VARIANT_TAG(t_0) == 23) {
            FX_CALL(
               _fx_M6C_formFM10CTypRawPtrN14C_form__ctyp_t2LN19C_form__ctyp_attr_tN14C_form__ctyp_t(0, _fx_g16C_form__CTypVoid,
                  &v_0), _fx_catch_0);

         _fx_catch_0: ;
         }
         else {
            FX_CALL(_fx_M6C_formFM10CTypRawPtrN14C_form__ctyp_t2LN19C_form__ctyp_attr_tN14C_form__ctyp_t(0, t_0, &v_0),
               _fx_catch_1);

         _fx_catch_1: ;
         }
         FX_CHECK_EXN(_fx_catch_2);
         _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(v_0, &v_2->t1, &v_1);
         FX_CALL(
            _fx_M6C_formFM10CExpBinaryN14C_form__cexp_t4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
               &_fx_g14C_form__COpAdd, vcase_1->t1, vcase_1->t2, &v_1, fx_result), _fx_catch_2);

      _fx_catch_2: ;
         _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_1);
         if (v_0) {
            _fx_free_N14C_form__ctyp_t(&v_0);
         }
         goto _fx_endmatch_0;
      }
   }
   _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_3 = {0};
   _fx_N14C_form__ctyp_t t_1 = 0;
   _fx_N14C_form__ctyp_t t_2 = 0;
   _fx_N14C_form__ctyp_t t_3 = 0;
   _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_4 = {0};
   FX_CALL(_fx_M6C_formFM12get_cexp_ctxT2N14C_form__ctyp_tR10Ast__loc_t1N14C_form__cexp_t(e_0, &v_3, 0), _fx_catch_3);
   FX_COPY_PTR(v_3.t0, &t_1);
   _fx_R10Ast__loc_t loc_0 = v_3.t1;
   if (FX_REC_VARIANT_TAG(t_1) == 23) {
      FX_COPY_PTR(_fx_g16C_form__CTypVoid, &t_2);
   }
   else {
      FX_COPY_PTR(t_1, &t_2);
   }
   FX_CHECK_EXN(_fx_catch_3);
   FX_CALL(_fx_M6C_formFM10CTypRawPtrN14C_form__ctyp_t2LN19C_form__ctyp_attr_tN14C_form__ctyp_t(0, t_2, &t_3), _fx_catch_3);
   _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(t_3, &loc_0, &v_4);
   FX_CALL(
      _fx_M6C_formFM9CExpUnaryN14C_form__cexp_t3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
         &_fx_g18C_form__COpGetAddr, e_0, &v_4, fx_result), _fx_catch_3);

_fx_catch_3: ;
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_4);
   if (t_3) {
      _fx_free_N14C_form__ctyp_t(&t_3);
   }
   if (t_2) {
      _fx_free_N14C_form__ctyp_t(&t_2);
   }
   if (t_1) {
      _fx_free_N14C_form__ctyp_t(&t_1);
   }
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_3);

_fx_endmatch_0: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM10cexp_derefN14C_form__cexp_t1N14C_form__cexp_t(
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   struct _fx_N14C_form__cexp_t_data_t** fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   int tag_0 = FX_REC_VARIANT_TAG(e_0);
   if (tag_0 == 4) {
      _fx_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_0 = &e_0->u.CExpUnary;
      if (vcase_0->t0.tag == 6) {
         FX_COPY_PTR(vcase_0->t1, fx_result); goto _fx_endmatch_2;
      }
   }
   if (tag_0 == 3) {
      _fx_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_1 =
         &e_0->u.CExpBinary;
      if (vcase_1->t0.tag == 1) {
         _fx_N14C_form__ctyp_t v_0 = 0;
         _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_1 = {0};
         _fx_T2N14C_form__ctyp_tR10Ast__loc_t* v_2 = &vcase_1->t3;
         _fx_N14C_form__ctyp_t t_0 = v_2->t0;
         int tag_1 = FX_REC_VARIANT_TAG(t_0);
         if (tag_1 == 17) {
            if (FX_REC_VARIANT_TAG(t_0->u.CTypRawPtr.t1) == 8) {
               FX_COPY_PTR(_fx_g15C_form__CTypAny, &v_0); goto _fx_endmatch_0;
            }
         }
         if (tag_1 == 17) {
            FX_COPY_PTR(t_0->u.CTypRawPtr.t1, &v_0); goto _fx_endmatch_0;
         }
         FX_COPY_PTR(_fx_g15C_form__CTypAny, &v_0);

      _fx_endmatch_0: ;
         FX_CHECK_EXN(_fx_catch_0);
         _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(v_0, &v_2->t1, &v_1);
         FX_CALL(
            _fx_M6C_formFM10CExpBinaryN14C_form__cexp_t4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
               &_fx_g20C_form__COpArrayElem, vcase_1->t1, vcase_1->t2, &v_1, fx_result), _fx_catch_0);

      _fx_catch_0: ;
         _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_1);
         if (v_0) {
            _fx_free_N14C_form__ctyp_t(&v_0);
         }
         goto _fx_endmatch_2;
      }
   }
   _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_3 = {0};
   _fx_N14C_form__ctyp_t t_1 = 0;
   _fx_N14C_form__ctyp_t t_2 = 0;
   _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_4 = {0};
   FX_CALL(_fx_M6C_formFM12get_cexp_ctxT2N14C_form__ctyp_tR10Ast__loc_t1N14C_form__cexp_t(e_0, &v_3, 0), _fx_catch_1);
   FX_COPY_PTR(v_3.t0, &t_1);
   _fx_R10Ast__loc_t loc_0 = v_3.t1;
   int tag_2 = FX_REC_VARIANT_TAG(t_1);
   if (tag_2 == 17) {
      if (FX_REC_VARIANT_TAG(t_1->u.CTypRawPtr.t1) == 8) {
         FX_COPY_PTR(_fx_g15C_form__CTypAny, &t_2); goto _fx_endmatch_1;
      }
   }
   if (tag_2 == 17) {
      FX_COPY_PTR(t_1->u.CTypRawPtr.t1, &t_2); goto _fx_endmatch_1;
   }
   FX_COPY_PTR(_fx_g15C_form__CTypAny, &t_2);

_fx_endmatch_1: ;
   FX_CHECK_EXN(_fx_catch_1);
   _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(t_2, &loc_0, &v_4);
   FX_CALL(
      _fx_M6C_formFM9CExpUnaryN14C_form__cexp_t3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
         &_fx_g16C_form__COpDeref, e_0, &v_4, fx_result), _fx_catch_1);

_fx_catch_1: ;
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_4);
   if (t_2) {
      _fx_free_N14C_form__ctyp_t(&t_2);
   }
   if (t_1) {
      _fx_free_N14C_form__ctyp_t(&t_1);
   }
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_3);

_fx_endmatch_2: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM10cexp_arrowN14C_form__cexp_t3N14C_form__cexp_tR9Ast__id_tN14C_form__ctyp_t(
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   struct _fx_R9Ast__id_t* m_id_0,
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_N14C_form__cexp_t_data_t** fx_result,
   void* fx_fv)
{
   _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_0 = {0};
   int fx_status = 0;
   FX_CALL(_fx_M6C_formFM12get_cexp_ctxT2N14C_form__ctyp_tR10Ast__loc_t1N14C_form__cexp_t(e_0, &v_0, 0), _fx_cleanup);
   _fx_R10Ast__loc_t loc_0 = v_0.t1;
   if (FX_REC_VARIANT_TAG(e_0) == 4) {
      _fx_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_0 = &e_0->u.CExpUnary;
      if (vcase_0->t0.tag == 6) {
         _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_1 = {0};
         _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(t_0, &loc_0, &v_1);
         FX_CALL(
            _fx_M6C_formFM7CExpMemN14C_form__cexp_t3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(vcase_0->t1,
               m_id_0, &v_1, fx_result), _fx_catch_0);

      _fx_catch_0: ;
         _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_1);
         goto _fx_endmatch_0;
      }
   }
   _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_2 = {0};
   _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(t_0, &loc_0, &v_2);
   FX_CALL(
      _fx_M6C_formFM9CExpArrowN14C_form__cexp_t3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(e_0, m_id_0, &v_2,
         fx_result), _fx_catch_1);

_fx_catch_1: ;
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_2);

_fx_endmatch_0: ;

_fx_cleanup: ;
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_0);
   return fx_status;
}

FX_EXTERN_C int _fx_M6C_formFM8cexp_memN14C_form__cexp_t3N14C_form__cexp_tR9Ast__id_tN14C_form__ctyp_t(
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   struct _fx_R9Ast__id_t* m_id_0,
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_N14C_form__cexp_t_data_t** fx_result,
   void* fx_fv)
{
   _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_0 = {0};
   int fx_status = 0;
   FX_CALL(_fx_M6C_formFM12get_cexp_ctxT2N14C_form__ctyp_tR10Ast__loc_t1N14C_form__cexp_t(e_0, &v_0, 0), _fx_cleanup);
   _fx_R10Ast__loc_t loc_0 = v_0.t1;
   if (FX_REC_VARIANT_TAG(e_0) == 4) {
      _fx_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_0 = &e_0->u.CExpUnary;
      if (vcase_0->t0.tag == 5) {
         _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_1 = {0};
         _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(t_0, &loc_0, &v_1);
         FX_CALL(
            _fx_M6C_formFM9CExpArrowN14C_form__cexp_t3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(vcase_0->t1,
               m_id_0, &v_1, fx_result), _fx_catch_0);

      _fx_catch_0: ;
         _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_1);
         goto _fx_endmatch_0;
      }
   }
   _fx_T2N14C_form__ctyp_tR10Ast__loc_t v_2 = {0};
   _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(t_0, &loc_0, &v_2);
   FX_CALL(
      _fx_M6C_formFM7CExpMemN14C_form__cexp_t3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(e_0, m_id_0, &v_2,
         fx_result), _fx_catch_1);

_fx_catch_1: ;
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_2);

_fx_endmatch_0: ;

_fx_cleanup: ;
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&v_0);
   return fx_status;
}

FX_EXTERN_C int fx_init_C_form(void)
{
   fx_arr_t z_0 = {0};
   int fx_status = 0;
   fx_copy_arr(&z_0, &_fx_g16C_form__all_idcs);
   FX_CALL(
      _fx_M6C_formFM8make_ptrN14C_form__ctyp_t1N14C_form__ctyp_t(_fx_g16C_form__CTypVoid, &_fx_g23C_form__std_CTypVoidPtr, 0),
      _fx_cleanup);
   FX_CALL(
      _fx_M6C_formFM14make_const_ptrN14C_form__ctyp_t1N14C_form__ctyp_t(_fx_g16C_form__CTypVoid,
         &_fx_g28C_form__std_CTypConstVoidPtr, 0), _fx_cleanup);
   FX_CALL(
      _fx_M6C_formFM9CTypArrayN14C_form__ctyp_t2iN14C_form__ctyp_t(0, _fx_g15C_form__CTypAny, &_fx_g24C_form__std_CTypAnyArray),
      _fx_cleanup);
   FX_CALL(
      _fx_M6C_formFM10CTypVectorN14C_form__ctyp_t1N14C_form__ctyp_t(_fx_g15C_form__CTypAny, &_fx_g25C_form__std_CTypAnyVector),
      _fx_cleanup);
   _fx_g18C_form__std_sizeof = _fx_g9Ast__noid;
   _fx_g21C_form__std_fx_malloc = _fx_g9Ast__noid;
   _fx_g19C_form__std_fx_free = _fx_g9Ast__noid;
   FX_COPY_PTR(_fx_g16C_form__CTypVoid, &_fx_g21C_form__std_fx_free_t);
   FX_COPY_PTR(_fx_g16C_form__CTypVoid, &_fx_g21C_form__std_fx_copy_t);
   _fx_g21C_form__std_FX_INCREF = _fx_g9Ast__noid;
   _fx_g21C_form__std_FX_DECREF = _fx_g9Ast__noid;
   _fx_g30C_form__std_FX_REC_VARIANT_TAG = _fx_g9Ast__noid;
   _fx_g48C_form__std_FX_MAKE_RECURSIVE_VARIANT_IMPL_START = _fx_g9Ast__noid;
   _fx_g33C_form__std_FX_MAKE_FP_IMPL_START = _fx_g9Ast__noid;
   _fx_g29C_form__std_FX_MAKE_FP_BY_FCV = _fx_g9Ast__noid;
   _fx_g19C_form__std_FX_CALL = _fx_g9Ast__noid;
   _fx_g23C_form__std_FX_COPY_PTR = _fx_g9Ast__noid;
   _fx_g26C_form__std_FX_COPY_SIMPLE = _fx_g9Ast__noid;
   _fx_g33C_form__std_FX_COPY_SIMPLE_BY_PTR = _fx_g9Ast__noid;
   _fx_g18C_form__std_FX_NOP = _fx_g9Ast__noid;
   _fx_g20C_form__std_FX_BREAK = _fx_g9Ast__noid;
   _fx_g23C_form__std_FX_CONTINUE = _fx_g9Ast__noid;
   _fx_g26C_form__std_FX_CHECK_BREAK = _fx_g9Ast__noid;
   _fx_g29C_form__std_FX_CHECK_BREAK_ND = _fx_g9Ast__noid;
   _fx_g29C_form__std_FX_CHECK_CONTINUE = _fx_g9Ast__noid;
   _fx_g24C_form__std_FX_CHECK_EXN = _fx_g9Ast__noid;
   _fx_g30C_form__std_FX_CHECK_ZERO_STEP = _fx_g9Ast__noid;
   _fx_g25C_form__std_FX_LOOP_COUNT = _fx_g9Ast__noid;
   _fx_g28C_form__std_FX_CHECK_EQ_SIZE = _fx_g9Ast__noid;
   _fx_g23C_form__std_fx_copy_ptr = _fx_g9Ast__noid;
   _fx_g25C_form__std_FX_STR_LENGTH = _fx_g9Ast__noid;
   _fx_g25C_form__std_FX_STR_CHKIDX = _fx_g9Ast__noid;
   _fx_g23C_form__std_FX_STR_ELEM = _fx_g9Ast__noid;
   _fx_g28C_form__std_FX_STR_ELEM_CLIP = _fx_g9Ast__noid;
   _fx_g28C_form__std_FX_STR_ELEM_WRAP = _fx_g9Ast__noid;
   _fx_g28C_form__std_FX_STR_ELEM_ZERO = _fx_g9Ast__noid;
   _fx_g23C_form__std_FX_MAKE_STR = _fx_g9Ast__noid;
   _fx_g23C_form__std_FX_FREE_STR = _fx_g9Ast__noid;
   _fx_g23C_form__std_fx_free_str = _fx_g9Ast__noid;
   _fx_g23C_form__std_FX_COPY_STR = _fx_g9Ast__noid;
   _fx_g23C_form__std_fx_copy_str = _fx_g9Ast__noid;
   _fx_g21C_form__std_fx_substr = _fx_g9Ast__noid;
   _fx_g24C_form__std_FX_FREE_LONG = _fx_g9Ast__noid;
   _fx_g24C_form__std_fx_free_long = _fx_g9Ast__noid;
   _fx_g24C_form__std_FX_COPY_LONG = _fx_g9Ast__noid;
   _fx_g24C_form__std_fx_copy_long = _fx_g9Ast__noid;
   FX_COPY_PTR(_fx_g16C_form__CTypVoid, &_fx_g25C_form__std_fx_exn_info_t);
   _fx_g29C_form__std_FX_REG_SIMPLE_EXN = _fx_g9Ast__noid;
   _fx_g33C_form__std_FX_REG_SIMPLE_STD_EXN = _fx_g9Ast__noid;
   _fx_g22C_form__std_FX_REG_EXN = _fx_g9Ast__noid;
   _fx_g34C_form__std_FX_MAKE_EXN_IMPL_START = _fx_g9Ast__noid;
   _fx_g20C_form__std_FX_THROW = _fx_g9Ast__noid;
   _fx_g25C_form__std_FX_FAST_THROW = _fx_g9Ast__noid;
   _fx_g23C_form__std_FX_FREE_EXN = _fx_g9Ast__noid;
   _fx_g23C_form__std_FX_COPY_EXN = _fx_g9Ast__noid;
   _fx_g28C_form__std_FX_MAKE_EXN_IMPL = _fx_g9Ast__noid;
   _fx_g23C_form__std_fx_free_exn = _fx_g9Ast__noid;
   _fx_g23C_form__std_fx_copy_exn = _fx_g9Ast__noid;
   _fx_g22C_form__std_FX_RETHROW = _fx_g9Ast__noid;
   _fx_g31C_form__std_FX_FREE_LIST_SIMPLE = _fx_g9Ast__noid;
   _fx_g31C_form__std_fx_free_list_simple = _fx_g9Ast__noid;
   _fx_g26C_form__std_fx_list_length = _fx_g9Ast__noid;
   _fx_g29C_form__std_FX_FREE_LIST_IMPL = _fx_g9Ast__noid;
   _fx_g29C_form__std_FX_MAKE_LIST_IMPL = _fx_g9Ast__noid;
   _fx_g26C_form__std_FX_LIST_APPEND = _fx_g9Ast__noid;
   _fx_g24C_form__std_FX_MOVE_LIST = _fx_g9Ast__noid;
   _fx_g22C_form__std_FX_CHKIDX1 = _fx_g9Ast__noid;
   _fx_g21C_form__std_FX_CHKIDX = _fx_g9Ast__noid;
   _fx_g23C_form__std_FX_ARR_SIZE = _fx_g9Ast__noid;
   _fx_g23C_form__std_FX_FREE_ARR = _fx_g9Ast__noid;
   _fx_g23C_form__std_FX_MOVE_ARR = _fx_g9Ast__noid;
   _fx_g23C_form__std_fx_free_arr = _fx_g9Ast__noid;
   _fx_g23C_form__std_fx_copy_arr = _fx_g9Ast__noid;
   _fx_g28C_form__std_fx_copy_arr_data = _fx_g9Ast__noid;
   _fx_g23C_form__std_fx_make_arr = _fx_g9Ast__noid;
   _fx_g21C_form__std_fx_subarr = _fx_g9Ast__noid;
   _fx_g23C_form__std_fx_free_vec = _fx_g9Ast__noid;
   _fx_g23C_form__std_fx_copy_vec = _fx_g9Ast__noid;
   _fx_g23C_form__std_fx_make_vec = _fx_g9Ast__noid;
   _fx_g30C_form__std_FX_FREE_REF_SIMPLE = _fx_g9Ast__noid;
   _fx_g30C_form__std_fx_free_ref_simple = _fx_g9Ast__noid;
   _fx_g28C_form__std_FX_FREE_REF_IMPL = _fx_g9Ast__noid;
   _fx_g28C_form__std_FX_MAKE_REF_IMPL = _fx_g9Ast__noid;
   _fx_g22C_form__std_FX_FREE_FP = _fx_g9Ast__noid;
   _fx_g22C_form__std_FX_COPY_FP = _fx_g9Ast__noid;
   _fx_g22C_form__std_fx_free_fp = _fx_g9Ast__noid;
   _fx_g22C_form__std_fx_copy_fp = _fx_g9Ast__noid;
   _fx_g24C_form__std_fx_free_cptr = _fx_g9Ast__noid;
   _fx_g24C_form__std_fx_copy_cptr = _fx_g9Ast__noid;
   FX_COPY_PTR(_fx_g16C_form__CTypVoid, &_fx_g28C_form__std_fx_ifaces_t_cptr);
   _fx_g25C_form__std_FX_COPY_IFACE = _fx_g9Ast__noid;
   _fx_g25C_form__std_FX_FREE_IFACE = _fx_g9Ast__noid;
   _fx_g25C_form__std_fx_copy_iface = _fx_g9Ast__noid;
   _fx_g25C_form__std_fx_free_iface = _fx_g9Ast__noid;
   _fx_g26C_form__std_fx_query_iface = _fx_g9Ast__noid;
   _fx_g25C_form__std_fx_get_object = _fx_g9Ast__noid;
   _fx_g25C_form__std_fx_make_iface = _fx_g9Ast__noid;

_fx_cleanup: ;
   FX_FREE_ARR(&z_0);
   return fx_status;
}

FX_EXTERN_C void fx_deinit_C_form(void)
{
   FX_FREE_ARR(&_fx_g16C_form__all_idcs);
   if (_fx_g23C_form__std_CTypVoidPtr) {
      _fx_free_N14C_form__ctyp_t(&_fx_g23C_form__std_CTypVoidPtr);
   }
   if (_fx_g28C_form__std_CTypConstVoidPtr) {
      _fx_free_N14C_form__ctyp_t(&_fx_g28C_form__std_CTypConstVoidPtr);
   }
   if (_fx_g24C_form__std_CTypAnyArray) {
      _fx_free_N14C_form__ctyp_t(&_fx_g24C_form__std_CTypAnyArray);
   }
   if (_fx_g25C_form__std_CTypAnyVector) {
      _fx_free_N14C_form__ctyp_t(&_fx_g25C_form__std_CTypAnyVector);
   }
   if (_fx_g21C_form__std_fx_free_t) {
      _fx_free_N14C_form__ctyp_t(&_fx_g21C_form__std_fx_free_t);
   }
   if (_fx_g21C_form__std_fx_copy_t) {
      _fx_free_N14C_form__ctyp_t(&_fx_g21C_form__std_fx_copy_t);
   }
   if (_fx_g25C_form__std_fx_exn_info_t) {
      _fx_free_N14C_form__ctyp_t(&_fx_g25C_form__std_fx_exn_info_t);
   }
   FX_FREE_LIST_SIMPLE(&_fx_g21C_form__std_FX_PTR_xD);
   FX_FREE_LIST_SIMPLE(&_fx_g26C_form__std_FX_PTR_xD_CLIP);
   FX_FREE_LIST_SIMPLE(&_fx_g26C_form__std_FX_PTR_xD_WRAP);
   FX_FREE_LIST_SIMPLE(&_fx_g26C_form__std_FX_PTR_xD_ZERO);
   if (_fx_g28C_form__std_fx_ifaces_t_cptr) {
      _fx_free_N14C_form__ctyp_t(&_fx_g28C_form__std_fx_ifaces_t_cptr);
   }
}

